社区
C++ Builder
帖子详情
关于程序退出的奇怪问题!
Lersh
2002-07-19 09:34:19
在一个程序里注册了系统热键,并且在OnClose里写了CanClose=false;就是说点击X不许退出,除非满足一个条件才调用自己写的一个退出函数(这个函数正确无误,注销了系统热键),但是在关机时,该程序却无法结束进程,表面上是关掉了,但在进程察看器理缺陷是没有退出,造成无法关机,无法重起,无法注销……
请问如何解决这个问题?如何得知系统在关机(重起,注销)时发给程序的退出消息?
...全文
89
13
打赏
收藏
关于程序退出的奇怪问题!
在一个程序里注册了系统热键,并且在OnClose里写了CanClose=false;就是说点击X不许退出,除非满足一个条件才调用自己写的一个退出函数(这个函数正确无误,注销了系统热键),但是在关机时,该程序却无法结束进程,表面上是关掉了,但在进程察看器理缺陷是没有退出,造成无法关机,无法重起,无法注销…… 请问如何解决这个问题?如何得知系统在关机(重起,注销)时发给程序的退出消息?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jishiping
2002-07-21
打赏
举报
回复
有一点忘了,在OnQueryEndSession里,需要将Msg.Result设成TRUE才可以,
这才是导致再按一次注销、重起、关机才行的原因。
void __fastcall TForm1::OnQueryEndSession(TMessage& Msg)
{
EnableClose = true; Msg.Result = TRUE;
}
jishiping
2002-07-21
打赏
举报
回复
最好的方法,就是用一个变量,表示是否允许退出。缺省值为false,表示不
允许退出。当执行你自己的函数时或者受到消息WM_QUERYENDSESSION时,将
这个变量设成true。这样在OnQueryClose里,判断这个变量就可以了。
bool EnableClose = false;
void __fastcall TForm1::OnQueryEndSession(TMessage& Msg)
{
EnableClose = true;
}
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = EnableClose;
}
Lersh
2002-07-21
打赏
举报
回复
jishiping(JSP 季世平),有一个问题,在OnQueryClose里加入CanClose=false;然后用这个方法的话,按下注销、充气、关机,程序退出后,Windows就暂停了,要再按一次注销、重起、关机才行……
jishiping
2002-07-20
打赏
举报
回复
如 kingcaiyao(AKing) 所说。
uio45757
2002-07-20
打赏
举报
回复
刚好遇上这个问题,我是从那个
OnCloseQuery那里解决了窗体关闭的问题的
你说的注册了系统热键,是什么来的,我来帮你提前一下
jishiping
2002-07-20
打赏
举报
回复
class TForm1 : public TForm
{
private:
void __fastcall OnQueryEndSession(TMessage&);
public:
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, OnQueryEndSession);
END_MESSAGE_MAP(TForm)
};
void __fastcall TForm1::OnQueryEndSession(TMessage& Msg)
{
//这儿加上你的允许退出的条件,或者直接调用
Application->Terminate();
}
Lersh
2002-07-20
打赏
举报
回复
public:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, OnExit);
END_MESSAGE_MAP(TForm);
这样可以吗?
Lersh
2002-07-20
打赏
举报
回复
就是说要重载WM_QUERYENDSESSION消息是吗?拦截系统消息?
niu_zai
2002-07-20
打赏
举报
回复
应该只能在OnCloseQuery里面,才能写CanClose := Flase;
whitetiger8
2002-07-19
打赏
举报
回复
来晚了,我感觉楼上2位的方法就行了。
dragonhux
2002-07-19
打赏
举报
回复
除了楼上说的外,还要注意一下OnQueryClose事件!
注意CanClose一定要付值!
网事随逢
2002-07-19
打赏
举报
回复
1.是否CanClose=true了?
kingcaiyao
2002-07-19
打赏
举报
回复
1.关于第1个问题,你要检查你的程序代码。
2.系统在关机时,会发送WM_QUERYENDSESSION消息,你可以重载这个消息来处理一些事情。
1小时入门最新小
程序
授权登录注册功能开发,并把注册记录添加到数据库
新版微信小
程序
授权登录,
退出
,缓存,小
程序
个人中心的实现 如果把用户授权的信息存入Mysql/云开发的数据库,怎么实现呢? 授权登录对于不同的用户好像没有唯一的标识,是不是还得获取openid才行? 授权登录必须从...
Unity控制
程序
退出
最近把公司的游戏发布到各种PC的游戏大厅,遇到了挺多
奇怪
的需求。之前介绍了一些Unity发布PC端控制窗口最大最小化、修改exe信息等
问题
,这次来探讨一下
退出
游戏的
问题
。
keil5编译器
退出
调试时卡死
在Openedv论坛,正点原子解答网友帖子关于Keil_5.25版本Debug会卡死无法
退出
问题
!!!时给出一种解决办法: 解决方法: 工程路径不要有任何中文。 这个方法对我的工程是有用的。我也查找了一些资料,均没有给出...
Keil5
退出
仿真调试卡死的解决办法
在Openedv论坛,正点原子解答网友帖子关于Keil_5.25版本Debug会卡死无法
退出
问题
!!!这个方法对我的工程是有用的。我也查找了一些资料,均没有给出导致卡死的具体原因。恰好我有几个同事在升级到keil5 V5.29版本时...
CFileDialog
程序
异常
退出
问题
我实地察看了一下,现象很
奇怪
。当对话框选择路径为桌面的时候,就一定会自动
退出
。非桌面路径选择的时候,不会出现。 我仔细观察了她的使用环境,桌面上图标很多。那么这是原因之一了。在自己机器桌面
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章