我的托盘程序让系统无法关机!·!··#·!#·!##·¥

proman2003 2003-08-21 04:36:12
我的托盘程序导致系统无法关机,我在WndProc(var Message:TMessage) 中捕捉到WM_QUERYENDSESSION消息,可是程序处理完该消息后,系统仍然无法关机,下面是我的代码,请高人指教

procedure TfrmMain.WndProc(var Message:TMessage);
begin
if not (message.Msg=last) then
begin
if message.Msg in [WM_QUERYENDSESSION,WM_ENDSESSION] then
begin
message.Result:=1;
frmMain.Close;
SendMessage(HWND_BROADCAST, WM_QUERYENDSESSION, 0, 0);
end;
last:=message.Msg;
end;
inherited WndProc(Message);
end;
...全文
154 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiflower 2004-01-09
  • 打赏
  • 举报
回复
戏子的方法是正确的。
你先用个最简单的托盘程序试一试,以确定到底是什么原因
搞不懂现代人 2004-01-09
  • 打赏
  • 举报
回复
哦老乡我也遇到了这种问题怎么办啊真是急
proman2003 2003-09-02
  • 打赏
  • 举报
回复
to:shanlin(山中林)、cnhgj(戏子)
我试过捕捉cnhgj(戏子)先生所说的消息,不管用,我用了spcomm控件,在检测到WM_QUERYENDSESSION后,我关闭了串口,可还是不行。
shanlin 2003-08-31
  • 打赏
  • 举报
回复
问题可能在别的方面,你是不是用了什么通信控件,有一些有这个毛病
cnhgj 2003-08-31
  • 打赏
  • 举报
回复
不可能,我的托盘程序就是用这个截取这个消息的,你自已试试吧
proman2003 2003-08-30
  • 打赏
  • 举报
回复
哪为知道?
proman2003 2003-08-27
  • 打赏
  • 举报
回复
同志们帮帮忙,给分
proman2003 2003-08-26
  • 打赏
  • 举报
回复
没人知道吗?
mme 2003-08-22
  • 打赏
  • 举报
回复
你是不是用了其他的通讯控件啊,比如TNUDP之类的.
mayande 2003-08-22
  • 打赏
  • 举报
回复
没人知道吗?
mayande 2003-08-22
  • 打赏
  • 举报
回复
我也遇到同样的问题
proman2003 2003-08-22
  • 打赏
  • 举报
回复
请继续讨论,下班之前我一直在线
proman2003 2003-08-22
  • 打赏
  • 举报
回复
我的ONCLOSEQUERY中也未写任何代码

proman2003 2003-08-22
  • 打赏
  • 举报
回复
to:cnhgj(戏子)
托盘程序用楼上的方法是捕捉不到WM_QUERYENDSESSION的,我早就试过这个方法了,问题不在于捕获window关机消息(因为我已经捕获到了,请看我的程序),问题是Result:=1了仍然不能关机


pupil2003 2003-08-22
  • 打赏
  • 举报
回复
我是用一个串口控件,我在formclose事件中关闭了串口通讯进程


cnhgj 2003-08-21
  • 打赏
  • 举报
回复
自定义一个消息事件!捕获window关机消息

procedure WMQUERYENDSESSION(Var msg:Tmessage); Message WM_QUERYENDSESSION;

然后在implementation写这入这些

procedure Tform1.WMQUERYENDSESSION(Var msg:Tmessage);
begin
msg.Result:=1;
end;

就可以了!
jpyc 2003-08-21
  • 打赏
  • 举报
回复
你是否在ONCLOSEQUERY事件中加了什么代码,导致这种问题。
proman2003 2003-08-21
  • 打赏
  • 举报
回复
没人知道吗?
proman2003 2003-08-21
  • 打赏
  • 举报
回复
procedure TfrmMain.WndProc(var Message:TMessage);
begin
if not (message.Msg=last) then
begin
if message.Msg in [WM_QUERYENDSESSION,WM_ENDSESSION] then
begin
message.Result:=1;
frmMain.Close;
end;
last:=message.Msg;
end;
inherited WndProc(Message);
end;

这样我也试过

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧