对于采用Apartment的Com服务器来说,StA中包含一个隐藏的窗口对象,如何得到这个
窗口句柄

解决方案 »

  1.   

    I agree with In355Hz
    EnumThreadWindows
      

  2.   

    EnumThreadWindows(dwThreadId: DWORD; lpfn: TFNWndEnumProc; lParam: LPARAM)没法得到lpfn,还是不行啊
      

  3.   

    是不是这样:
    CDlg *pDlg = (CDlg*)AfxGetMainWnd();
    我在多线程里是这样做的,你try一下。
      

  4.   

    lpfn: TFNWndEnumProc 是个回调函数,需要自己写,EnumThreadWindows 用找到的窗口句柄和 lParam: LPARAM 调用这个函数。BOOL CALLBACK EnumThreadWndProc(
      HWND hwnd,      // handle to window
      LPARAM lParam   // application-defined value
    );
      

  5.   

    HWND hWnd[256];
    static WndCount = 0;
    LRESULT CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
    {
       DWORD ThreadID,FindProcID;
       if(WndCount > 255 || hwnd == NULL) return FALSE;
       ThreadID = GetWindowThreadProcessId(hwnd,&FindProcID);
       if(FindProcID == (DWORD)lParam)
      {
        hWnd[WndCount] = hWnd;
        WndCount++;
       }
      return TRUE;}
    void WndFinder(DWORD YourProcID)
    {
      EnumWindows((WNDENUMPROC)EnumWndProc,(LPARAM)YourProcID);
    }