我有一系列要监视点击的按钮。我还有一组HWINEVENTHOOK,将用来监视它们。 GetWindowThreadProcessID给我一个LPDWORD进程ID,SetWinEventHook不接受。我不清楚在此示例中我是否正确使用了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++;
}
最佳答案
LPDWORD
只是DWORD*
的typedef,并且Windows SDK函数参数为“LPsomething”时,通常需要将指针传递给“something”(LP [C] [W] STR字符串类型除外)。
DWORD processID;
DWORD threadID = GetWindowThreadProcessId(hWnd, &processID);
if (threadID)
{
// Do something with threadID and/or processID
}
Windows SDK使用Systems Hungarian notation作为Desktop / Classic API。