CPro1,CPro2是两个类,hWnd1是在CPro1中声明的变量。
在CPro1中: hWnd1=::FindWindow(NULL, "Tecplot 360 2010");
在CPro2中: CPro1 m_pro1;
            ::SendMessage(m_pro1.hWnd1,WM_CLOSE,0,0);我用上述方法想在类CPro2中关闭hWnd1对应的窗口,但不行,没有反应。在类CPro1中用
::SendMessage(hWnd1,WM_CLOSE,0,0);可以关闭的。求解释

解决方案 »

  1.   

    在CPro2中: CPro1 m_pro1;
      ::SendMessage(m_pro1.hWnd1,WM_CLOSE,0,0);
    ---------------------------------------------
    这里调用的m_pro1.hWnd1窗口句柄是否有效?
      

  2.   

    CPro2 需要正确获得CPro1的对象,
    还不如直接发送,CPro2中调用下面的代码 hWnd1=::FindWindow(NULL, "Tecplot 360 2010");
     ::SendMessage(hWnd1,WM_CLOSE,0,0);
      

  3.   

    你这个方法我也试过了的,不行!可能是我把"Tecplot 360 2010"设为了主窗口的子窗口的原因吧,如下:
    hWnd1=::FindWindow(NULL, "Tecplot 360 2010");
    HWND hWnd2=AfxGetMainWnd()->m_hWnd;
    ::SetParent(hWnd1,hWnd2);
      

  4.   

    我也遇到这个问题了  现在在做dll注入  被注入的窗口只是出于未响应状态 但不能自动关闭
      

  5.   

    应该是m_pro1.hWnd1无效或者是m_pro1无效,你检查检查吧
      

  6.   

    我能吧MFC创建的窗口关闭 但不能把C#创建的窗口关闭
      

  7.   

    如果你是在CPro2 中直接这么写的
    CPro1 m_pro1;
    ::SendMessage(m_pro1.hWnd1,WM_CLOSE,0,0);
    hWnd1=::FindWindow(NULL, "Tecplot 360 2010");
    又不是在构它的构造函数中的话
    hWnd1又没初始化,关得了才怪了很像这个帖子
    http://topic.csdn.net/u/20110517/17/d06f6378-140f-4759-b3a8-645d959d2577.html
      

  8.   

    [Quote=引用 9 楼 lyyscf 的回复:]
    如果你是在CPro2 中直接这么写的C/C++ code
    CPro1 m_pro1;
    ::SendMessage(m_pro1.hWnd1,WM_CLOSE,0,0);hWnd1=::FindWindow(NULL, "Tecplot 360 2010");
    又不是在构它的构造函数中的话
    hWnd1又没初始化,关得了才怪了
    有道理,那怎么才能获得第一个窗口的指针呢
      

  9.   

    pWnd=CWnd::FromHandle((HWND)hd);
    if ( pWnd!=NULL )
    {
    pWnd->PostMessage(WM_QUIT,NULL,NULL);
    }