C++ LPDWORD 的正确用法

JPa*_*ley 2 c++ winapi

我有一组 hWnds 按钮,我想监视点击次数。我还有一组 HWINEVENTHOOK 用于监视它们。GetWindowThreadProcessID 为我提供了一个 LPDWORD 进程 ID,SetWinEventHook 不接受该 ID。我不清楚在这个例子中我是否正确使用了 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++;
}
Run Code Online (Sandbox Code Playgroud)

And*_*ers 5

LPDWORD只是一个 typedef DWORD*,当 Windows SDK 函数参数是“LPsomething”时,您通常需要传递一个指向“something”的指针(LP[C][W]STR 字符串类型除外)。

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

Windows SDK对桌面/经典 API使用系统匈牙利表示法