请高手给个通过进程id获得窗口句柄的简单代码 谢谢

解决方案 »

  1.   

    下面是一种方向操作的思路:一个进程可以拥有很多主窗口,也可以不拥有主窗口,所以这样的API函数是不存在的,所幸的是,相反的函数是有的。所以我们可以调用EnumWindows来获得所有的窗口, 然后在判断窗口是否属于这个进程。typedef struct tagWNDINFO
    {
    DWORD dwProcessId;
    HWND hWnd;
    } WNDINFO, *LPWNDINFO;BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam)
    {
    DWORD dwProcessId;
    GetWindowThreadProcessId(hWnd, &dwProcessId);
    LPWNDINFO pInfo = (LPWNDINFO)lParam;
    if(dwProcessId == pInfo->dwProcessId)
    {
    pInfo->hWnd = hWnd;
    return FALSE;
    }
    return TRUE;
    }HWND GetProcessMainWnd(DWORD dwProcessId)
    {
    WNDINFO wi;
    wi.dwProcessId = dwProcessId;
    wi.hWnd = NULL;
    EnumWindows(YourEnumProc,(LPARAM)&wi);
    return wi.hWnd;
    }如果这个进程没有窗口,函数返回NULL
      

  2.   

    常规的方法只能是EnumWindows枚举所有窗口逐个判断其所属的进程ID。