现在我已经能获得指定窗口的句柄了hwnd,现在想把这个指定的窗口关闭,采用了下面的方法:
1。发出关闭窗口的消息SendMessage(hwnd, WM_QUIT, 0, 0)
2。直接关闭窗口DestroyWindow(hwnd)
但是这两种方法都不能关闭指定的窗口。用DestroyWindow返回错误为Acess is denied。
3。向指定的窗口发出ALT+F4的组合键,但不知道怎么使用。是SendMessage(hwnd, VK_MENU&VK_F4,0,0)吗?请教各位,如何实现呢?

解决方案 »

  1.   

    SendMessage(hwnd,WM_CLOSE,0,0);
    也是不行的,我试过了。
      

  2.   

    用这个肯定行,参数是要杀死的窗口名称
    BOOL FindProcessHandleAndKill(const CString &cs_WndName)
    {
    HWND hWnd;
    DWORD ProcessID;
    HANDLE hProcess; hWnd=::FindWindow(NULL, cs_WndName);
    if(hWnd==NULL)//テサモミユメオスエーソレ
    {
    return FALSE;
    }
    else
    {
    if(GetWindowThreadProcessId(hWnd, &ProcessID)==0)//ハァーワ
    {
    return FALSE;
    }
    else
    {
    hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
    if(hProcess==NULL)
    {
    return FALSE;
    }
    else
    {
    if(TerminateProcess(hProcess, 0))
    {
    return TRUE;
    }
    else 
    {
    return FALSE;
    }
    }
    }
    }}
      

  3.   

    SendMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);
      

  4.   

    SendMessage(hwnd, WM_DESTROY, 0, 0);
      

  5.   

    后一个错了。WM_CLOSE 对应 OnClose(),是个反馈消息,在 CWnd::DestroyWindow() 执行时发出。
    WM_DESTROY 对应 OnDestroy(),同样是个反馈消息,在窗体(图形及内存)销毁时发出。WM_SYSCOMMAND 对应 OnSysCommand(int nID, LPARAM lParam),执行系统菜单命令,
           nID == SC_CLOSE 表示“关闭”。nID 还可以表示“最大/小化”、
           “还原”、“移动”、“改变大小”等。WM_QUIT 在 MFC 中没见过,也许 SDK 中才中用得到吧。
      

  6.   

    SendMessage(hwnd,WM_CLOSE,0,0);
    是可以的,我试过的
      

  7.   

    可能是目标窗口处理了quit,close等消息所以你关不掉。杀主线程是一个办法,做好能做成任务管理器中的那种就好了。
      

  8.   

    cheeralen(夏日香气) 
      那不可能是 WM_CLOSE 的作用。我上面说了,WM_CLOSE 对应 OnClose(),
    是个反馈消息。
      

  9.   

    Alt + F4 实际就是执行 OnSysCommand()。要关别的窗口,应先看看自己的窗口是怎么关的,不能想当然。
      

  10.   

    再有,SendMessage(hwnd, VK_MENU&VK_F4,0,0) 纯粹是乱来了。这实际是一个键盘消息,
    Ait + F4 应该作为消息中的参数才对。
      

  11.   

    那能否用Alt+F4来关闭指定窗口呢?程序如何实现呢?谢谢!
    感觉风之子的MFC水平很高,佩服,佩服!