procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
NMUDP1.Free;
Message.Result := 1;
end;
procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
NMUDP1.Free;
Message.Result := 1;
end;
可是我这个程序是在托盘区中加入图标的,用的trayicon311的控件。当主窗体是显示时就ok,关机正常,当主窗体隐藏时,这家伙却收不到WM_QUERYENDSESSION这个消息。关不了机
From1.close;
Message.Result := 1;
关机正常,但是当主窗口隐藏时就收到一个WM_ENDSESSION的消息,用:From1.close;
Message.Result := 1;
的话,程序是关了,但还是关不了机。想一想可能是程序回答windows关机询问时返回的信息无法让它继续下一个程序的询问。但也只有两种可能呀,一种是回答可以关闭对话,一种是回答不可以关闭对话。小弟又不知道他妈的微软到底要一个怎么鬼值。给message.result付值1也不行,0也不行,-1也不行,我想还有一种办法是让windows在关机时跳过这个程序,不给它发WM_QUERYENDSESSION消息或者象hook一样给message.result:=callnexthook(.......);把它让给下一个程序对象去回答。但小弟我不会写呀!哪位大侠行行好,帮帮忙!
SERVER端:
procedure TForm1.SIdUDPUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
readcor:pchar;
readstr:string;
begin
getmem(readcor,adata.Size);
AData.ReadBuffer(readcor,adata.Size);
readstr:=StrPas(readcor);
showmessage('KK'+readstr);
end;
CLIENT端:
procedure Tmainform.Button5Click(Sender: TObject);
var
sendcode:array[0..29] of char;
begin
sendCode:='OK?';
CIDUDP.Active:=TRUE;
CIDUDP.SendBuffer(SENDCode,10);
end;
readcor:array [0..29] of char;
然后就读到了。TMNUDP倒可以用formip得到那边的IP地址,这个鸟怎么得到呢?一定要在client端发CIDUDP.SEND(Ahost,Aport,AData)告诉他吗?