是不是那个程序没有restore按钮?
ShowWindow(HwdWindow, SW_RESTORE|SW_SHOW)试试
实在不行再加上SetForegroundWindow()

解决方案 »

  1.   

    外部程序是一个MDI风格的GIS程序,有restore,maximize,minimize按钮。
      

  2.   

    补充一下,LngRes = ShowWindow(HwdWindow, SW_RESTORE)
    后,LngRes>0表明该语句是成功执行了的,但却好象没有执行一样!
      

  3.   

    你检查此时的HwdWindow 是对的吗?
    是不是根本就没捕获到它的窗口?
      

  4.   

    To: Beni “是不是根本就没捕获到它的窗口?”
    应该是没捕获到它的窗口了,因为如果这个程序没有被最小化时用
    LngRes = SetForegroundWindow(HwdWindow)  是能将它设置为当前活动窗口的(如果最小化就不行)   
      

  5.   


    这么奇怪啊,呵呵
    可能那个程序本身对SW_RESTORE进行了处理了吧
    要不就是捕获的那个窗口不是程序的主窗口???
      

  6.   

    天啊,我把OpenIcon、ShowWindow、BringWindowToTop放在一起都试了,
    还是没用,怪啊,然而最小化后我也在任务栏上的看到它啊。
      

  7.   

    OpenIcon、ShowWindow、BringWindowToTop放在一起都试了:我在调试过程中FindWindow的确取得了不为0的句柄,并且在执行OpenIcon,ShowWindow,BringWindowToTop均得到了不为0的返回值,这都表明这些API函数都是成功执行了的!补充一点,在(调试过程中)执行这些函数后,本程序都失去了焦点,但这个MDI外部程序却没有弹出到桌面,仍然在任务栏上(最小化)。
      

  8.   

    OpenIcon、ShowWindow、BringWindowToTop放在一起都试了:我在调试过程中FindWindow的确取得了不为0的句柄,并且在执行OpenIcon,ShowWindow,BringWindowToTop均得到了不为0的返回值,这都表明这些API函数都是成功执行了的!补充一点,在(调试过程中)执行这些函数后,本程序都失去了焦点,但这个MDI外部程序却没有弹出到桌面,仍然在任务栏上(最小化)。 
      

  9.   

    ShowWindow(HwdWindow, SW_RESTORE¦SW_SHOW|SW_SHOWNORMAL)
      

  10.   

    用SPY++的确不能找到这个外部GIS程序的某个可视窗体的句柄与FindowWindow取得的句柄相同,难道是某个不可见的窗体?但我的确是看到了主窗体的Title是“XXX管理系统”,才将此STRING值赋给WinTile变量然后用FindWindow(vbNullString,WinTitle)来取句柄的啊,怪事。 
      

  11.   

    你看到的只是它的子窗体的标题,或者更可能是自己画的“XXX管理系统”,而根本不是标题
      

  12.   

    由于这是个MDI程序,其主窗体的标题随活动子窗体而变化,我又如何才能取其句柄呢?
      

  13.   

    使用 SetWindowPos() 函数,一定能够解决你的问题。
      

  14.   

    用HWND GetParent( HWND hWnd   // handle to child window);
    得到他的父窗口,
    如果再GetParent()==HWND_DESKTOP,那就是主窗体了 
      

  15.   

    BOOL ActiveOtherWindow()
    {  
        HWND hToFind = ::FindWindow(NULL,_T("MyWindow"));
        if(hToFind==NULL)
          return FALSE;
        HWND hCurWnd = NULL;
        DWORD dwMyID;
        DWORD dwCurID;    hCurWnd = ::GetForegroundWindow();
        dwMyID = ::GetCurrentThreadId();
        dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
        ::AttachThreadInput( dwMyID, dwCurID, TRUE);
        ::SetForegroundWindow( hToFind );
        ::AttachThreadInput( dwMyID, dwCurID, FALSE);
        return TRUE;}上面方法就能真正意义上激活窗口了。WIN9X、ME、NT、2K上测试都通过:)FindWindow不好在窗口标题不固定或者不确定时候找不到窗口。要是你先::SetProp(HWND hWnd,char* str)做过标记就好说了....
      

  16.   

    不错, 111222(<xmp>) 好象可以解决最小化了的窗口。
    想到另一问题:使用FindWindow()怎样用类名参数进行查找,MFC的类名总是
    afx::::之类的形式,如何使用
      

  17.   

    哦,我来晚了,窗口类不一定都是afx::::,什么样的都有,IE是IEFrame.....Edit也有自己的....HWND hwnd=::FindWindow("IEFrame",NULL);
    这样找到的就是IE的上一个实例