我有一系列要监视点击的按钮。我还有一组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。

10-07 19:10