2017-09-16 2 views
-3

나는 hWnds 개의 버튼을 가지고 있는데, 클릭 수를 모니터하고 싶습니다. 또한 모니터 할 때 사용할 HWINEVENTHOOK 배열이 있습니다. GetWindowThreadProcessID는 나에게 SetWinEventHook에 의해 받아 들여지지 않는 LPDWORD 프로세스 ID를 제공합니다. 나는 LPDWORD가 무엇인지에 대해 명확하지 않다. 도와주세요? LPDWORD 그냥 DWORD에 대한 포인터 지적 모든 사람들에게C++ LPDWORD 란 무엇입니까?

감사합니다 아래

고정 코드입니다.

새로운 코드 :

int i = 0; 
for (HWND hWnd : hWnds) { 
    DWORD processID = 0; 
    DWORD threadID = GetWindowThreadProcessId(hWnd, &processID); 
    hooks[i] = SetWinEventHook(EVENT_OBJECT_INVOKED, EVENT_OBJECT_INVOKED, 
    NULL, 
     WinEventProcCallback, processID, threadID, WINEVENT_OUTOFCONTEXT); 
     i++; 
} 
+3

'DWORD 프로세스 ID = 0]과''GetWindowThreadProcessId (HWND, 프로세스 ID) '와'SetWinEventHook (EVENT_OBJECT_INVOKED, EVENT_OBJECT_INVOKED, NULL, WinEventProcCallback, 프로세스 ID, threadID, WINEVENT_OUTOFCONTEXT) '의 문제점은 무엇인가? – user0042

+2

잘못된 코드 일 뿐이며 실행하려고하면 충돌이 발생합니다. 'DWORD processID'를 사용해, 2 번째의 인수에'& processID'를 건네 줄 필요가 있습니다. 즉, winapi 함수가 변수를 업데이트 할 수 있도록 참조로 DWORD를 전달합니다. 구조 헝가리 인, hehe. –

+1

@HansPassant는 주소 (즉,에 대한 포인터) –

답변

1

LPDWORDDWORD* 때 윈도우 SDK 기능 매개 변수는 일반적으로 LP를 제외하고는 "무언가"(에 대한 포인터를 전달하는 데 필요 "LPsomething"입니다 단지 형식 정의입니다 [C] [W] STR 문자열 유형).

DWORD processID; 
DWORD threadID = GetWindowThreadProcessId(hWnd, &processID); 
if (threadID) 
{ 
    // Do something with threadID and/or processID 
} 

Windows SDK는 Desktop/Classic API에 Systems Hungarian notation을 사용합니다.

+0

Windows SDK *는 때때로 시스템 헝가리 표기법을 사용하지만 항상 그런 것은 아닙니다. 예를 들어,'cch '와'cb'접두어는 분명히 애플 헝가리 표기법입니다. 그리고 대부분의 COM 인터페이스는 Apps Hungarian 표기법을 사용합니다. 게다가'LP [C] [W | A | T] STR' 형은 무언가를 가리 킵니다. – IInspectable

+0

문자열 유형이 아무것도 가리 키지 않았다고 말한 적은 없지만이 질문의 맥락에서 문자열이 호출 된 함수에 의해 할당/설정되면 'LPTSTR *'이됩니다. – Anders

+0

그 경우에는 이것을 확장하거나 해당 발언을 완전히 스크랩해야합니다. 그것이 의미하는대로 그것은 너무 많은 해석의 여지를 남겨 둡니다. – IInspectable

관련 문제