首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VB
基础类
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
在vb里如果接收到系统退出或关闭的事件
[已结贴,结贴人:jameslan520]
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 10:24:52
楼主
我做了一个记录上机时间的程序,是随系统启动的,但如何能在系统退出或关闭时让vb记录退出时的时间呢?
试过了用QueryUnload与Terminate()事件,但都不理想。因为好多时候直接关闭系统时vb的程序也跟着关闭了,并没有去触发这一事件执行。
问题点数:
10
回复次数:
21
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zzyong00
阿勇
等级:
发表于:
2008-05-20 10:38:05
1
楼 得分:
3
http://www.lihuasoft.net/article/show.php?id=34
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
penguinMII
企鹅
等级:
发表于:
2008-05-20 10:59:41
2
楼 得分:
3
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If MsgBox("现在时间是:" & Now() & " 是否退出?", vbYesNo, "退出确定") = vbYes Then
Open "c:\a.txt" For Append As #1
Print #1, CStr(Now())
Close #1
Else
Cancel = 1
End If
End Sub
自己在C盘目录下建立个a.txt
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Sandrer
严重睡眠不足啊^_^
等级:
发表于:
2008-05-20 11:10:02
3
楼 得分:
0
判断QueryUnload事件中的UnloadMode参数,如果等于4的话就是系统在关机而导致程序退出
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 11:13:33
4
楼 得分:
0
看了,等下试试看!
多谢了!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 11:25:30
5
楼 得分:
0
我现在用的就是2楼所说的方法,但不太正常,开始时还可以,后来就不正常了,我用的是英文版的XP,不知是不是调整时区与区域语言所致,反正现在用这些办法就不太理想。
3楼所说的也同样道理,因为我自己用的机子,所以我不会手动去中止我的程序的,但就关机时就是不能正常的触发VB的那个事件,只有在手动中止时那事件才能正常的触发。
你看一下我的记录文件:
Start at: 2008-4-24 11:08:40
Exit at: 2008-4-24 11:44:52
Use Time[hh:mm]: [0:37]
Start at: 2008-4-24 13:19:20
Exit at: 2008-4-24 15:39:16
Use Time[hh:mm]: [2:21]
Start at: 2008-4-27 22:38:45
Start at: 2008-4-28 7:16:07
Start at: 2008-4-28 8:21:14
Start at: 2008-4-28 9:49:48
Start at: 2008-4-28 10:17:36
Exit at: 2008-4-28 11:04:44
Use Time[hh:mm]: [0:47]
都能正确地记录每次关机的时间的。
我想可能真的要用到1楼所提的,用API函数来截取系统的消息才行了,但这个用vb做得又比较麻烦,倒是用vc好!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 11:39:36
6
楼 得分:
0
前面贴子打溜了,是不能正确记录的
——————————————————
都不能正确地记录每次关机的时间的。
我想可能真的要用到1楼所提的,用API函数来截取系统的消息才行了,但这个用vb做得又比较麻烦,倒是用vc好!
——————————————————
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
penguinMII
企鹅
等级:
发表于:
2008-05-20 11:47:18
7
楼 得分:
0
Start at: 2008-4-27 22:38:45
Start at: 2008-4-28 7:16:07
Start at: 2008-4-28 8:21:14
Start at: 2008-4-28 9:49:48
Start at: 2008-4-28 10:17:36
Exit at: 2008-4-28 11:04:44
Use Time[hh:mm]: [0:47]
你start后有什么操作吗?使用的是系统关闭计算机了?那就把代码改下就行了。就想3楼说的。在判断下UnloadMode参数。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 11:54:53
8
楼 得分:
0
我的程序是这样的:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
WriteRecord (True)‘写当前时间到一文本文件的过程
End Sub
'Private Sub Form_Terminate()
' WriteRecord (True)‘写当前时间到一文本文件的过程
'End Sub
Private Sub Quit_Click()
Shell_NotifyIcon NIM_DELETE, nidProgramData
WriteRecord (True)‘写当前时间到一文本文件的过程
End
End Sub
但都不能正确地记录关机的时间,当你手动去结束这一程序时才会正常地记录结束程序的时间到那文本文件里。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Sandrer
严重睡眠不足啊^_^
等级:
发表于:
2008-05-20 16:45:22
9
楼 得分:
0
楼主你好毅力!!!
估计每次测试的时候都要关机..........
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-20 17:16:00
10
楼 得分:
0
的确,我在测试的那天开关机次数在数十次以上。
试得头都发晕了,还是拿不下这个问题!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
myjian
嗷嗷叫的老马---平安..平安....祝所有人平安....大家一定要顶住!!!!
等级:
发表于:
2008-05-21 14:40:30
11
楼 得分:
0
装个VM吧..
这样太累了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zzyong00
阿勇
等级:
发表于:
2008-05-21 15:17:38
12
楼 得分:
2
一般来说,关机或Logff后,Windows会传依序送出WM_QUERYENDSESSION的信息给每个Process,如果中间有一个Process不能顺利结束(例如:Word修改后未存档,而出现是否存档,但我们按取消),这时该信息执行的结果会传回False(0),这时Windows也就不再继续送WM_QUERYENDSESSION给下一个Proccess。如果 在你的进程收到WM_QUERYENDSESSION之前,其它程序不能顺利结束,你在 Form_QueryUnload就收不到消息吧
没有测试,你自己试试吧
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Chen8013
举杯邀明月
等级:
发表于:
2008-05-21 15:26:26
13
楼 得分:
1
你在 Form_Unload() 事件中写代码就是了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-05-21 15:42:19
14
楼 得分:
0
用VM还是更惨,更慢啦!
因为每次都要正常关机才能测试得到那个结果的嘛!
Unload事件我之前是已经测试过的了,没用的,那只是窗体卸载时触发的,这个直接关机是不会有什么反应的。
在正常关机与非正常关机的情况我都试过了,一样的。现在关键的是通过什么方法让系统在关闭时去触发VB里的事件。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
minimana
minimana
等级:
发表于:
2008-05-21 22:10:57
15
楼 得分:
0
能不能调用系统日志?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zhyzhsh
飞扬的蚂蚁
等级:
发表于:
2008-05-22 14:15:41
16
楼 得分:
0
同意zzyong00说的,消息是关键,找一下MSDN。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
QQ342151559
等级:
发表于:
2008-05-22 16:46:28
17
楼 得分:
0
估计楼主的确机器还不错,不然每次重起花的时间也够多的
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dandelionl
飘
等级:
发表于:
2008-05-22 19:29:57
18
楼 得分:
0
mark
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lqjava
代码人生
等级:
发表于:
2008-05-22 22:12:50
19
楼 得分:
0
http://www.qudong.com/soft/program/VB/vbshili/20080317/1323.html
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
vansoft
Vansoft Workroom
等级:
发表于:
2008-05-23 09:40:19
20
楼 得分:
1
处理这个消息WM_QUERYENDSESSION
我N年前弄过。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameslan520
浪のてん涯
等级:
发表于:
2008-06-02 22:04:02
21
楼 得分:
0
经测试:
Form_QueryUnload事件、Form_Unload事件,WM_QUERYENDSESSION消息截获 、WM_ENDSESSION消息截获,
以上四种方法里面的代码都会在关机时执行。
我以前的不正常工作是因为用了某些优化软件设置了系统在关机时自动结束所有的任务,并把等待的时间设置行太短了,以致放在上面那些事情里的代码没有足够的时间执行,系统就已经关闭掉了。
多谢各位的鼎力相助!
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
abc推荐给好友