标题:VB6在win7怎么写程序判断用户执行重启还是关机?
只看楼主
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
结帖率:91.53%
已结贴  问题点数:20 回复次数:16 
VB6在win7怎么写程序判断用户执行重启还是关机?
如题,谢谢
搜索更多相关主题的帖子: 关机 执行 用户 重启 win7 
2022-09-14 16:43
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
要用哪个API,谢谢

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2022-09-14 16:44
时光流逝
Rank: 4
来 自:北京
等 级:业余侠客
威 望:8
帖 子:92
专家分:297
注 册:2019-11-16
得分:7 
ExitWindows
2022-09-16 20:16
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:7 


[此贴子已经被作者于2022-9-17 13:29编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-17 10:16
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
回复 3楼 时光流逝
这个可以拦截到关机的消息,并判断是重启还是关机吗?

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2022-09-19 08:38
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
一般用ExitWindowsEx关机、重启、注销,没见有人用ExitWindows,或许ExitWindows也可以实现吧。

ExitWindows和ExitWindowsEx的API声明如下:

Declare Function ExitWindows Lib "user32" (ByVal dwReserved As Long, ByVal uReturnCode As Long) As Long
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

[此贴子已经被作者于2022-9-20 11:15编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-20 10:40
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
一般来说,关机或Logff后,Windows会传依序送出WM_QUERYENDSESSION的信息给每个Process,如果中间有一个Process不能顺利结束(例如:Word修改后未存档,而出现是否存档,但我们按取消),这时该信息执行的结果会传回False(0),这时Windows也就不再继续送WM_QUERYENDSESSION给下一个Proccess。反之,如果所有的Process都可以顺利结束(也就是每个送出的WM_QUERYENDSESSION都传回True),那才代表以以顺利结束。
不管WM_QUERYENDSESSION最后的结果是可以顺利结束或不能顺利结束,Windows会再送一个WM_ENDSESSION的信息给所有的Process

Public Const WM_QUERYENDSESSION = &H11  '关机,注销,重新启动时或其他程序调用了ExitWindows API函数,系统依次发送给所有程序的消息
Public Const WM_ENDSESSION = &H16  '当系统发出WM_QUERYENDSESSION消息后,等待检查WM_QUERYENDSESSION消息的返回值, 再接着发送此消息给应用程序,系统并根据返回值决定是否关机,注销或重启

楼主,这个你怎么拦截消息并区分是重启还是关机?

[此贴子已经被作者于2022-9-20 13:54编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-20 12:10
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
回复 7楼 yuma
RegisterWindowsMessagea,百度了一下,那些C或者C++的代码,有点看不懂,这个可以给个VB的声明和示例吗?谢谢!

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2022-09-21 14:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:7 
XP拦截WM_QUERYENDSESSION应该就可以(顶层窗口)
之后的版本就复杂点,相关主要的:
ShutdownBlockReasonCreate()
ShutdownBlockReasonDestroy()
WM_QUERYENDSESSION
WM_ENDSESSION
2022-09-21 17:16
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
回复 9楼 吹水佬
重启、注销、关机 发的都是相同的消息。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-21 17:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510035-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058422 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved