在对应的窗口类的PretranslateMessage中拦截按键消息即可:(给你一段参考代码)
if( message == WM_KEYDOWN )
{
                // 按下Esc键或者Ctrl+W键关闭当前窗口
if ( wParam == VK_ESCAPE || ( wParam == 0x57 && GetKeyState( VK_CONTROL ) < 0 ) ) // 0x57 - 按键W

解决方案 »

  1.   

    alt f4关闭窗口属于正常关闭,CAPP的ExitInstance() 函数可以捕获
    被别的程序Kill掉的程序自己是不知道的,可以通过拦截API来捕获
    意外挂掉的话,可以在InitInstance()里面使用try...catch捕捉到
      

  2.   

    Alt+F4调用的应该是WM_KEYDOWN之类的,不过默认的窗口过程会自动再发一个WM_CLOSE。
    所以以可以映射一个OnClose()。
    如果是任务管理器的第一个选项卡(应用程序)里关闭的话,应该会先发WM_QUIT,这个消息你可以直接处理。如果程序没响应再TerminateProcess。
    第二个选项卡(中止进程)直接TerminateProcess()。因为TerminateProcess()时必须先OpenProcess(),你可以hook这个API,或者通过修改进程ACL,阻止别的进程OpenProcess()。这样的话,任务管理器里是无法中止进程的(提示访问被拒绝)。
    程序错误直接关闭的话,就没办法了,进程会直接被系统结束。一般的方法是把程序注册成系统服务,这样程序崩溃后重新启动。Vista之后提供了自动恢复运行的API,不过用得比较少。