【问题标题】:Handle to window handle把手到窗把手
【发布时间】:2010-11-20 11:02:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: c windows winapi


    【解决方案1】:

    您可以调用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);
    }
    

    【讨论】: