VS2019进程pid取主窗口句柄hwnd代码分享

网上的基本是全身错误的那个版本,这个代码是经过完善优化后,正确的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HWND GetHwndByPid(DWORD dwProcessID)
{
    HWND h = GetTopWindow(0);
    HWND retHwnd = NULL;
    while ( h )  
    {
        DWORD pid = 0;
        DWORD dwTheardId = GetWindowThreadProcessId( h,&pid);  
        if (dwTheardId != 0)
        {
            if ( pid == dwProcessID && GetParent(h)==NULL && ::IsWindowVisible(h))         
            {
                retHwnd = h;    //会有多个相等值
                char buf[MAX_PATH] = {0};
                sprintf(buf,"%0x",h);
                MessageBox(NULL,buf,"提示",MB_OK);
            }
        }
        h  = GetNextWindow(h,GW_HWNDNEXT);
    }
    return retHwnd;
}