社区
C++ Builder
帖子详情
BCB做的托盘程序,如果关机时程序还开着,会导致无法正常关机、注销、重启?
ZhouQiang
2003-08-20 09:10:53
我参考了以前的相关贴子,但不管用。
我现在要做到的功能是当Windows系统关机、注销、重启时我的托盘程序能自动退出并响应Windows系统关机、注销、重启操作。
现在关闭托盘程序没有问题,但Windows系统关机、注销、重启不响应。
另外请教一下:
Windows关机、注销、重启时给当前所有运行的应用程序发送的对应消息是什么?
...全文
166
21
打赏
收藏
BCB做的托盘程序,如果关机时程序还开着,会导致无法正常关机、注销、重启?
我参考了以前的相关贴子,但不管用。 我现在要做到的功能是当Windows系统关机、注销、重启时我的托盘程序能自动退出并响应Windows系统关机、注销、重启操作。 现在关闭托盘程序没有问题,但Windows系统关机、注销、重启不响应。 另外请教一下: Windows关机、注销、重启时给当前所有运行的应用程序发送的对应消息是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
TangH
2003-09-19
打赏
举报
回复
D
ZhouQiang
2003-08-21
打赏
举报
回复
问题已解决,谢谢各位支持。
总结一下:
1.与托盘无关。
2.在OnCloseQuery事件需要释放TNMUDP组件。
void __fastcall TFormMain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if ( Application->MessageBox("是否退出公文收发系统(客户端) ?", "提示", MB_YESNO | MB_ICONINFORMATION) == IDYES )
{
NMUDPReceive->Free() ;
NMUDPSend->Free() ;
CanClose = true ;
}
else
CanClose = false ;
}
ZhouQiang
2003-08-20
打赏
举报
回复
尝试过各种方法,无效,还是不知何故。
zjqyb
2003-08-20
打赏
举报
回复
看来你只能动态创建new
最后 delete it
try!!!
void __fastcall TForm1::WindowClose(TMessage & Message)
{
// do your code here
//如果有socket控件必须close;
NMUDP1->Destroy();
Message.Result = WM_QUERYENDSESSION;
}
BCB
2003-08-20
打赏
举报
回复
与托盘没关系
退出前,
FormDestry()
{
delete NMUDP1;
}
lltt
2003-08-20
打赏
举报
回复
look
ZhouQiang
2003-08-20
打赏
举报
回复
Close不是NMUDP成员
zjqyb
2003-08-20
打赏
举报
回复
NMUDP 也是socket控件
void __fastcall TForm1::WindowClose(TMessage & Message)
{
// do your code here
//如果有socket控件必须close;
NMUDP1->Close();
Message.Result = WM_QUERYENDSESSION;
}
ZhouQiang
2003-08-20
打赏
举报
回复
问zjqyb():
//如果有socket控件必须close;
何解?
我用的是NMUDP组件.
ZhouQiang
2003-08-20
打赏
举报
回复
//我的OnCloseQuery事件代码如下:
void __fastcall TFormMain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
/*
if ( Application->MessageBox("是否退出公文收发系统(客户端) ?", "提示", MB_YESNO | MB_ICONINFORMATION) == IDYES )
CanClose = true ;
else
CanClose = false ;
//*/
}
ZhouQiang
2003-08-20
打赏
举报
回复
我程序中有socket控件。
zjqyb
2003-08-20
打赏
举报
回复
程序里有socket控件,必须截获WM_QUERYENDSESSION消息并进行处理!!!!
sscwxch
2003-08-20
打赏
举报
回复
BCB自带一托盘列程,看看对你会有所帮助!
Examples/Apps/TrayIcon
zjqyb
2003-08-20
打赏
举报
回复
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,WindowClose)
END_MESSAGE_MAP(TForm)
};
void __fastcall TForm1::WindowClose(TMessage & Message)
{
// do your code here
//如果有socket控件必须close;
Message.Result = WM_QUERYENDSESSION;
}
jishiping
2003-08-20
打赏
举报
回复
托盘根本不影响关机、注销、重启,肯定是你在Form的OnCloseQuery事件里,设置CanClose
为false后才导致的。如上面所说,程序收到消息WM_QUERYENDSESSION后,这个消息的返回值
需要设为1,同时调用Application->Termiate();强制结束程序。或者在收到消息
WM_QUERYENDSESSION后设置一个变量,在OnCloseQuery事件中检查这个变量决定是否允许关
闭。
jishiping
2003-08-20
打赏
举报
回复
托盘根本不影响关机、注销、重启,肯定是你在Form的OnCloseQuery事件里,设置CanClose
为false后才导致的。如上面所说,程序收到消息WM_QUERYENDSESSION后,这个消息的返回值
需要设为1,同时调用Application->Termiate();强制结束程序。或者在收到消息
WM_QUERYENDSESSION后设置一个变量,在OnCloseQuery事件中检查这个变量决定是否允许关
闭。
ZhouQiang
2003-08-20
打赏
举报
回复
工作环境:Windows2000;BCB6
zjqyb
2003-08-20
打赏
举报
回复
处理WM_QUERYENDSESSION消息
chifengwatch
2003-08-20
打赏
举报
回复
我以前也是碰到同样的问题---不能关机,我曾经试图处理WM_QUERYENDSESSION,但似乎没有大的作用。我的解决办法就是:用NMUDP控件的时候NEW,用完后DELETE。
mme
2003-08-20
打赏
举报
回复
如果你去掉托盘都是不行,那就是是程序有问题了.
加载更多回复(1)
定
时
关机
---自制小
程序
可以设置定
时
关机
,
程序
占资源少,可以最小化到
托盘
不影响其他操作,有简单简绍。欢迎反馈
iphlpapi.h和iphlpapi.lib下载)
在编译
程序
时
出现找不到iphlpapi.h文件,
找了好久才找到,提供给大家!
最强悍的 VC VB反编译工具 Hex-Rays
最强悍的反编译工具 Hex-Rays。 可以反编译 VB VC
BCB
Delphi 等等一切 x86/x64 代码为 C 代码。密码参见内附说明文件。 我写了个简单的介绍 http://blog.caozhongyan.com/article.asp?id=19
BCB
如何将应用
程序
图标写到系统
托盘
中
1、新建一个工程,将工程存到目录D:/
BCB
Tray下,并在这个目录下拷入一个icon图标文件,文件名为Icon1.ico,作为本
程序
的系统
托盘
处的图标。2、在这个工程中再增加一个窗体Form2,要注意的是这个工程中,Form1是
启
动窗体,它负责系统
托盘
图标的总控工作,并不负有其它责任。应用
程序
的主窗口是由Form2 来负责的。在Form1的代码窗Unit1.cpp增加如下代码:#inclu
详解Android
关机
/
重
启
流程
android;framework;
关机
;
重
启
;sys.powerctl;
关机
对话框
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章