J'ai un tableau de hWnds de boutons que je veux surveiller pour les clics. J'ai aussi un éventail de HWINEVENTHOOK que je vais utiliser pour les surveiller. GetWindowThreadProcessID me donne un ID de processus LPDWORD, qui n'est pas accepté par SetWinEventHook. Je ne suis pas clair sur ce qu'est un LPDWORD. S'il vous plaît aider?C++ Qu'est-ce que LPDWORD?
Code fixe ci-dessous
Merci à tous ceux qui a fait remarquer que LPDWORD est juste un pointeur vers un DWORD.
Code:
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++;
}
'DWORD processID = 0;' et 'GetWindowThreadProcessId (hWnd, & processID)' et 'SetWinEventHook (EVENT_OBJECT_INVOKED, EVENT_OBJECT_INVOKED, NULL, WinEventProcCallback, processID, ThreadID, WINEVENT_OUTOFCONTEXT)' Quel est le problème ?? – user0042
C'est juste un mauvais code et il va planter quand vous essayez de l'exécuter. Vous devez utiliser 'DWORD processID' et passer' & processID' pour le second argument. En d'autres termes, vous passez un DWORD par référence afin que la fonction Winapi puisse mettre à jour votre variable. Système hongrois à la rescousse, hehe. –
@HansPassant qui n'est pas une référence qui est l'adresse de (c'est-à-dire un pointeur vers) –