关于应用程序消息的几个疑问:
1、这是我定义的截获程序消息的函数
procedure WMClose(var Message: TWMClose);message WM_CLOSE;procedure TFmain.WMClose(var Message: TWMClose);
begin
  {代码}
end;我点击窗体右上角的“X”,可以截获WM_CLOSE消息,然后执行代码,可我用 close关闭窗体,或者在任务栏里面,点击右键关闭程序,或者用ALT + F4关闭,缺没有截获该消息。应该如何写,才可以在关闭程序的各种情况下都截获消息呢?2、有程序A和程序B,程序B通过Socket连接到程序A,当程序B关闭的时候,告诉程序A,程序A同意后,程序B可以关闭。
如何实现。

解决方案 »

  1.   

    楼上,你是说canclose参数???
    不是吧。
      

  2.   

    在任务栏里面,点击右键关闭程序的实现:你可以去掉任务栏右键的关闭按钮。如果想屏蔽ALT+F4这是键盘钩子的问题。
      

  3.   

    把RemoveMenu(getsystemmenu(application.Handle,false),3,MF_BYPOSITION);
    放在form的oncreate里面就可以去掉右键的关闭菜单。
      

  4.   

    问题1:解决
    不用close指令关闭程序,改用发送消息。下面三个任选一个
      sendmessage(handle,WM_CLOSE,0,0);
      SendMessage(Handle,WM_SYSCOMMAND,SC_CLOSE,0);
      PostMessage(handle, WM_CLOSE, 0, 0);
      

  5.   

    问题1:
      procedure WMSysCommand(var message: TMessage); message WM_SYSCOMMAND;procedure TForm1.WMSysCommand(var message: TMessage);
    begin
      case message.msg of
        SC_CLOSE:
        {代码}
      else
        inherited;
      end;
    end;问题2:
      以UDP为例
       udpserverA,udpserverBudpserverB.Send(...,关闭代码);udpserverA.收到并分析,同意则Send(...,同意关闭)udpserverB.收到同意回复,关闭
      

  6.   

    to 楼上:关于问题2:
    如果用户用ALT + F4关闭程序呢?
    我是想截获程序B的close消息,然后发送给程序A,程序A如果同意关闭的话,程序B才关闭
      

  7.   

    那你还不如就在FormCloseQuery处理呢。和A通信后来设置canclose。顺便问一下楼主,如果用户通过任务管理器强行关闭你打算怎么处理呢?是屏蔽Ctrl+Alt+Del还是隐藏任务管理器的进程呢?
      

  8.   

    呵呵,最后又变成这类问题的(不能关闭程序)_____________________
    http://lysoft.7u7.net
      

  9.   

    在FormCloseQuery事件里写就行了。