处理窗把手

时间:2010-11-20 11:02:16

标签: c windows winapi

我已尝试使用“抓取桌面枚举的所有进程ID”方法,但这不起作用。

  • 有没有办法将句柄转换为窗口句柄? -OR -
  • 有没有办法获取进程ID并查找该进程生成的所有子窗口?

由于多个流程问题,我不想使用FindWindow

1 个答案:

答案 0 :(得分:6)

您可以致电EnumWindows()来迭代屏幕上的所有顶级窗口,然后使用GetWindowThreadProcessId()找出哪些属于您的流程。

例如:

BOOL CALLBACK ForEachTopLevelWindow(HWND hwnd, LPARAM lp)
{
    DWORD processId;
    GetWindowThreadProcessId(hwnd, &processId);
    if (processId == (DWORD) lp) {
        // `hwnd` belongs to the target process.
    }
    return TRUE;
}

VOID LookupProcessWindows(DWORD processId)
{
    EnumWindows(ForEachTopLevelWindow, (LPARAM) processId);
}