怎么拦截WM_QUIT消息?

解决方案 »

  1.   

    怎样拦截WM_QUIT消息,防止程序退出?100分有没人要啊?
      

  2.   

    防止程序退出用Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    事件就可以啊硬要用手功拦截就得自己写消息处理函数罗
      

  3.   

    QueryUnload事件参数Cancel=true阻止不了WM_QUIT消息
      

  4.   

    使用子类(用SetwindowLong等API)处理指定窗体的消息
      

  5.   

    给出代码啊!使用过,我是得不到WM_QUIT消息进行处理,得用全局钩子,那位知道的给出代码,测试正确立即给分!
      

  6.   

    是,QUERYUNLOAD只能拦截WM_CLOSE,而且我也不知道如何有效拦截该消息,常规的自己写窗口消息处理程序的办法也是不适用的,如果你熟悉WINDOWS窗口程序的消息处理就会明白我的意思了。因为该消息压根就不会被消息处理程序处理,因为在消息接收循环里就被终结了(用于退出循环),窗口的销毁是由WM_DESTROY引起的。
      

  7.   

    RegisterShellHook是一个未公开的 API系统函数,它可以帮助日志程序在整个 Windows系统范围内感知到其它窗体的创建、激活或关闭等消息。Public Declare Function RegisterShellHook Lib "Shell32" Alias "#181" _ 
    (ByVal hwnd As Long, ByVal nAction As Long) As Long 
      

  8.   

    你的问题太笼统,而且你知道在封装的严严实实的VB中实现这个功能就是倒行逆施,虽然有方法可以解决,但是其复杂程度难以想象。如果你仔细的研究一下Windows的消息机制并参考在C++下面是如何做的,然后再回头看看VB那可怜的内存池,也许你就不会这么问这个问题了。
      

  9.   

    用SetWindowLong把窗体句柄进行子类派生,在全局派生函数中判断msg是否等于WM_QUIT,并作相应操作
    判断完毕后用CallWindowProc还原窗体句柄注:子类派生不允许进行debug,请注意存档,请参考卢培培的相关例子
      

  10.   

    回答的人太多了,就不强分了
    只想说:
    局部钩子 vb 还是可以作的,主要是要注意存盘,容易当机
    当然不是放到 vb 的消息里
    要自己作消息循环
    然后判断 
    已经有很多做好的子类化 代码,请搜索后参考
      

  11.   

    再说一遍吧,WM_QUIT消息是不会进入窗口消息处理程序里面的,在循环读取消息中就被用来退出循环了!请不相信的各位自己去看VC里的窗口框架就知道了。