case ID_ITEM1: 
hWndPrevious = ::GetWindow(GetDesktopWindow(),GW_CHILD); 
char szHello[1024]; 
LPTSTR m_pszExeName; 
while  (IsWindow(hWndPrevious))    

int i=::GetWindowTextLength(hWndPrevious); 
::GetWindowText(hWndPrevious, szHello,i); if (strstr(szHello,"XXXX")) 

break; 

hWndPrevious  =  ::GetWindow(hWndPrevious,GW_HWNDNEXT); 
}    if(!hWndPrevious) 

MessageBox(NULL, "XXXX NOT Started", NULL, MB_OK); 

else 

ShowSendWindow(); 

break; 
因为编写错误,所以if (strstr(szHello,"XXXX")) 

break; 

总是break
哪位前辈能根据我这份代码写一份正确的代码出来(MFC)。100分感谢。

解决方案 »

  1.   

    "XXXX"名字的窗体会不会是某个窗体的子窗体,或者子窗体的子窗体??
    LZ的程序仅仅适用于"XXXX"名字的窗体为某个程序的主窗体。
      

  2.   


    是的,我就是要获得以“XXXX”名字的窗体为主窗体的程序句柄!那个代码在COM中可以正确使用的,但是在MFC里不知道怎么不行了,初学VC不会改,麻烦哪位前辈能给改一下。   说的太简单了我听不明白的。
      

  3.   

    CWnd* pWnd=CWnd::FindWindow(NULL,"××××");   
    HWND hwnd=pWnd->GetSafeHwnd();
      

  4.   

    CWnd* pWnd=CWnd::FindWindow(NULL,"××××");  
    HWND hwnd=pWnd->GetSafeHwnd();
    if(hwnd)
    {
        ......
    }
    else
    {
        MessageBox(NULL, "XXXX NOT Started", NULL, MB_OK);
    }
      

  5.   

    将hWndPrevious = ::GetWindow(GetDesktopWindow(),GW_CHILD);换为
    hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD);看看
      

  6.   

    哦,我发现,问题应该在if语句这儿,if (strstr(szHello,"XXXX")),感觉应该这样写if (strcmp(szHello,"XXXX") == NULL),否则只要包含"XXXX"名字的窗口都会被找到。