现在的位置: 首页 > 综合 > 正文

通过进程ID获取最顶层窗口句柄

2014年02月12日 ⁄ 综合 ⁄ 共 707字 ⁄ 字号 评论关闭

代码很简单,需要注意的是:最顶层的窗口,需要具备没有父窗口,我这里根据需要加上了判断WS_VISIBLE属性。

 

 

HWND hGetProcessWnd(DWORD dwProcessId)
{
       HWND   hRetWnd = NULL;
       DWORD dwEnumProcessID;

 

       HWND   hChildWnd = GetTopWindow(NULL);
       while(hChildWnd)
       {
              ::GetWindowThreadProcessId(hChildWnd, &dwEnumProcessID);
              if(dwProcessId == dwEnumProcessID)
              {
                     LONG lStyle = ::GetWindowLong(hChildWnd, GWL_STYLE);
                     if((lStyle & WS_VISIBLE) && (GetParent(hChildWnd)==NULL))
                     {
                            hRetWnd = hChildWnd;
                            break;

                     }
              }

              hChildWnd = GetWindow(hChildWnd, GW_HWNDNEXT);
       }

 

       return hRetWnd;
}

抱歉!评论已关闭.