WINDOWS推出时会向每个程序发送WM_QUERYENDSESSION消息
unit Unit1;
interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
Dialogs;
type
  TForm1 = class(TForm)  
  procedure FormCreate(Sender: TObject);  private
    { Private declarations }
    procedure winexit(var msg:Tmessage);message WM_QUERYENDSESSION; 
 public
    { Public declarations } 
 end;
var  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);beginend;procedure TForm1.winexit(var msg: Tmessage);
 begin
showmessage('关机了!');
   end;

解决方案 »

  1.   

    TNUMUDP通信的特点是一段只管发送,另一段只管接收,因此要实现你所说的就不好解决了,俺也不知如何处理。
      

  2.   

    to  softwing(向前看) 
    谢谢你的解答第一个问题能解决吗?
    呵呵
      

  3.   

    to : luoweicaisd(笑三少) 
    那这样的话就很麻烦了啊?to :  softwing(向前看)
    procedure winexit(var msg:Tmessage);这个过程的主要功能是什么呢?
    判断关机?
    那么返回值怎样,代表什么意思?
    能说详细一点吗?
      

  4.   

    我是来接分的,up & gz
      

  5.   

    1、Tnmudp这个控件在接收信息时有一个参数NumberBytes,当他的值<0时就表示客户端程序被杀死;
    2、同意softwing(向前看) ;我的问题:Tnmudp这个控件在win2000下发送和接收信息都没问题,但是在win98下,就有问题了:就是在判断客户端程序是否被杀死时,服务端发出信息后,就接受不到客户端的信息了。不知道是不是Tnmudp的一个BUG。该怎么解决呢,还请各位大虾不吝赐教。
      

  6.   

    unit Unit1;
    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
    Dialogs;
    type
      TForm1 = class(TForm)  
      procedure FormCreate(Sender: TObject);  private
        { Private declarations }
        procedure winexit(var msg:Tmessage);message WM_QUERYENDSESSION; 
     public
        { Public declarations } 
     end;
    var  Form1: TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.FormCreate(Sender: TObject);beginend;procedure TForm1.winexit(var msg: Tmessage);
     begin
    showmessage('关机了!');
       end;
      

  7.   

    第2个比较简单,我帮你再说一次吧
    一般这类程序在运行时,当进行关机操作,其它程序都被关掉了,只有它们不为所动。所以必须对关机消息进行处理。procedure exitwin(var msg:TWMQUERYENDSESSION);message WM_QUERYENDSESSION;
    procedure TServer.exitwin(var msg: TWMQUERYENDSESSION);
    begin
    inherited;
    server.Close;
    end;用这样的好象比较简单
      

  8.   

    如果你想开机就运行程序的话,防止用户用regedit或是ipconfig修改的话
    那么再procedure TServer.FormDestroy(Sender: TObject);
    var
      reg:Tregistry;
      s:string;
    begin
    s:=application.ExeName;
    reg:=Tregistry.Create;
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
      Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices',True);
      Reg.WriteString(...);
      reg.free;
    end;
      

  9.   

    关于第一个问题,小弟我有一建议,就是你的服务器端应该是开机就运行的吧
    我每阁多长时间向客户端发送一消息,客户端收到消息后,比如显示个messagebox,如果中断,则断开