我用FindWindow得到一个窗口句柄,用这个句柄要发送消息到目的窗口(多次),但我怎么知道窗口是否在中途关闭了,有什么办法可以检测吗?  或者有什么函数可以快速检查一个指针是否有效?

解决方案 »

  1.   

    每次发送之前 判断一下 句柄是否为NULL
      

  2.   


    不,我的句柄已经赋值了,我就是怕在中途窗口关闭了,句柄又不知道设为NULL
      

  3.   

    HWND hwnd = ::FindWindow(NULL,"计算器");
    if(hwnd == NULL)
    {
        MessageBox("没有打开计算器");
    }
    你可以试试啊  没打开hwnd就是NULL
      

  4.   

    晕倒,可能我没有说清楚,就像这样CWnd *pWnd=FindWindow(NULL,"Name");
    while(true)
    {
        pWnd->SendMessage(XXX,XXX,XXX);
    }
    代码较简单,大致也是这样,如果在循环的过程中窗口关闭了, pWnd 先前已经赋值过了,会自动变为NULL吗?还有 IsWindow 用的类型是 HWnd ,CWnd 怎么转为 HWnd 类型?但有一个成员变量 m_hWnd ,应该是吧,但pWnd无效了,怎么得到m_hWnd 
      

  5.   

    HWND hwnd =FindWindow(NULL,"Name");
    while(true)
    {
        ::SendMessage(hwnd,XXX,XXX);
    }
    可以通过句柄发送的  不一定非给使用  指针
      

  6.   

    HWND hWnd = ::Findow(NULL, _T("Name"));
    if(hWnd)
    {
     ::SendMessage(hWnd,..);
    }
      

  7.   

    每次都要找窗口?不断使用FindWindow 会不会降低效率啊?
      

  8.   

    FIND 来的句柄恐怕没什么别的方法了吧,别的程序的窗口,只能每次都判断下。人家又不会告诉你某个标志,我的窗口已经关闭了。
      

  9.   

    楼主把代码改成这样
    while(true)
    {
        HWND hWnd = FindWindow(....);
        if(NULL == hWnd)
        {
             //窗口挂了
        }
        else
       {
             SendMessage(......);
       }
    }
      

  10.   

    while(HWND hWnd = FindWindow(....))
    {
       SendMessage(......);
    }
      

  11.   


    加个判断啊!
    CWnd *pWnd=FindWindow(NULL,"Name");
    while(true)
    {
        if(pWnd && IsWndow(pWnd->m_hWnd))
            pWnd->SendMessage(XXX,XXX,XXX);
    }
      

  12.   

    HWND hWnd = ::Findow(NULL, _T("Name"));
    if(hWnd)
    {
     ::SendMessage(hWnd,..);
    }
    接收时做判空
      

  13.   

    嗯  谢谢了  我就是不知道 每次都要 FindWindow会不会影响效率