说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关机消息的拦截 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
关机消息的拦截 -VB资料

在关机或Logff前信息的拦截

  如果我们关机或Logoff时,我们的程序有时会因而无法按正常程序结束,一般我们会在Form的Unload中一段程序结束时要做什么事,但是,如果使用者直接用开始功能菜单的关机,会使UnLoad的部份没有做到,我们现在就想办法来拦截关机(或Logoff)时的信息。

  一般来说,关机或Logff后,Windows会传依序送出WM_QUERYENDSESSION的信息给每个Process,如果中间有一个Process不能顺利结束(例如:Word修改后未存档,而出现是否存档,但我们按取消),这时该信息执行的结果会传回False(0),这时Windows也就不再继续送WM_QUERYENDSESSION给下一个Proccess。反之,如果所有的Process都可以顺利结束(也就是每个送出的WM_QUERYENDSESSION都传回True),那才代表以以顺利结束。

  不管WM_QUERYENDSESSION最后的结果是可以顺利结束或不能顺利结束,Windows会再送一个WM_ENDSESSION的信息给所有的Process,而wParam的内容便是指出是否可以顺利结束(True菜单可以,False菜单不行,在vb中则CheckwParam = 0 菜单False ,0菜单True),说到这里大概就知道该如何做啦,程序如下:
  
’以下在Form
Private Sub Form_Load()
 Dim ret As Long

 ’记录原来的Window Procedure的位址
 preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
 ’设定form的window Procedure到wndproc
 ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
End Sub
  
Private Sub Form_Unload(Cancel As Integer)
 Dim ret As Long
 Dim fno As Long

 ’取消Message的截取,而使之又只送往原来的Window Procedure
 ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)

 ’这里只是要看看用关机的方式结束程序时,会不会执行到这里
 fno = FreeFile
 Open "c:\tt2" For Append As fno
 Print #fno, "ccc" + vbCrLf
 Close #fno
End Sub
  
’以下在.Bas
Option Explicit
  
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  
Public Const GWL_WNDPROC = (-4)
Public Const WM_ENDSESSION = &H16
Public Const WM_QUERYENDSESSION = &H11
  
Public preWinProc As Long
  
Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 If Msg = WM_QUERYENDSESSION Then
   Debug.Print "QryEnd", wParam, lParam
 Else
  If Msg = WM_ENDSESSION Then
   If wParam 0 Then ’代表将顺利关机或LogOff,这时便得做正常结束程序的操作
     Dim fno As Long
     Open "c:\ttt" For Output As #1
     Print #1, "hahcccc5"
     Close #1
   End If
  End If
 End If

 ’将之送往原来的Window Procedure
 wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
【CTO俱乐部走进海尔】活动图文直播进行中 燃料电池商业化,数据中心或将永不断电? 广告教父的哲学:值得F2P游戏借鉴的8条经验 UC李云:基于Chromium的浏览器如何打造更好体验 一周消息树:颠覆互联网思维?年薪50万码农转行卖凉皮 Coconut2D:跨平台2D游戏及应用开发工具 第八届中国大数据技术大会将于12月中旬隆重召开 10个常见的缓存使用误区 用户暴增下的收入降低,AWS面临尴尬 云数据中心选址PK:微软第一,IBM第二,谷歌最少 不应错过2014微信开发者大会的八个理由 为什么软件测试需要变革? 苹果和IBM成最佳搭档 微软谷歌或受威胁 OpenStack社区又添新成员 浪潮推动开放云生态系统构建 重度使用AWS及Hadoop,Pinterest的自服务平台打造历程 《近匠》腾讯信鸽:基于大数据的推送 超低功耗'Whisper'架构发布:IoT、可穿戴连接性IP新标准! R的数据分析制霸以及企业级应用盘点 第二届游戏运营技术论坛来袭!与大牛共论云时代的游戏运营之道 云雀科技:飞行器+地图,展望飞行器的新体验 Sandstorm,前Googler和极客名人建立通用开源工具保姆 触控科技CEO陈昊芝:引擎技术推动行业升级 谁能成为Hero,这一次你说了算!——TCL智能电视开发大赛创意阶段评审征集 微信官方在“公开课”上13个热点问题的解答摘要 MDCC 2014移动开发者大会10月开幕:你就是主角! 设计师该如何挣得一席之地? 回到未来:最热门的十大清洁能源技术公司 深度学习:未来机器人的进化途径 搜狗开源内部项目管理系统Cynthia,已被数十家企业采用 沃游戏新版本全新登场 好友PK根本停不下来 腾讯发布首款智能硬件,内部筹建孵化器鼓励创新 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 新装的WIN2000,关了启动程序,占内存近100M,还老出怪问题 连编以后,出现的错误,求解 我有一个外来控件(条形码),请问该如何用代码在图片框中动态添加一控件?? 系统设计师就要开考了,请考过高程和就要考高程全部看过来~~~~ 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 如何把一组CLASS文件打成一个JAR的包 谁用过solid数据库阿,可知里面怎莫用视图阿??紧急! 求求大哥们了 怎样动态改变控件的属性? 明天要去九城面试,有知道内情的吗,给说说,无限感激,, 大家帮忙看看!我有记个问题一直困扰我!(送分的问题(可以加100分啊),不够可加啊!都是送分题,来者都有分) 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 如何处理让播放器播放多首歌 【请教】vc适合oo开发? Window中的大/小字体显示属性改变后,影响对话框大小的问题(VC)? 如何处理让播放器播放多首歌 如何同时使用两个msn 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 在线等待大虾求助:win2000缠人问题 求ASP下进度条源码!多谢了! ———请帮忙----! 如何用sql语句将文本文件转换成sql数据库 用什么开发工具最好 急急急!急急急!accept 后如何获取Client端socket的源IP地址字符串???? 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 Jbuilder9加载了db2驱动却不能使用 高分请教!!!关于访问数据库的用的DataSet对象的 请问如何传递一个VarChar类型的参数给存储过程? 来Networkers, 感受最强劲的网络力量 关于打印图片的问题,高分~~ 电脑是windows2000和rh linux8双系统,开机时可以选择win还是linux,不选的话默认进linux,现在我想默入win2000,不知如何做? 扩展名为.MSI的是什么文件,怎么用? 明天要去九城面试,有知道内情的吗,给说说,无限感激,, 求中程和高程的书 提问—— 请问MAPI中的ID对应WEBDAV中的哪个字段? 为什么不能安装软件 怎样让窗体从屏幕的右下角显示 ■■高分请教一个SQL语句:ORACLE数据库,请看叙述■■ 请教哦~~我实在不知道该怎么做了。sql当中创建表后是如何修改表格的 Jbuilder9加载了db2驱动成功后却不能使用 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 关于连接池使用的问题,请大家帮忙了,谢谢大家了 关于API声明问题 因为控制不住自己,犯错误了,在这里说出来,希望MMDD们以后不要学我的样 制作好的安装安装包为什么在其它机上安装不行. 不知道是否有效,试一下吧。 急急急!!!如何恢复误删Acess数据库记录 自定义控件 - 怎样在 IDE 中调用原来的属性页以及暴露象 ComboBox 的 Style 属性? 呵呵,暴弓虽的泡mm方法【转载】 intel.exe是病毒吗?我的电脑是AMD的主板,CPU.可是任务管理器里怎么有一个叫intel.exe的映像名称.如图所示. Can you ( )speak to a person in old clothes.A.kind B.kindly C.polite D.friendly选哪个?为啥? Do you generally speak to people before they speak to you? 求文档:实验室枪的使用 As a studnet,you need to be polite and speak to old people ( )用polite 的正确形式填空 三年级上册苏教版语文第三课是什么名 英语单词意思前的〔sing. 求英文的有关台湾旅游的介绍,要简单易懂地 介绍一些简单易懂的英语小说 Everybody Hurts的歌词(中英文) ①无产阶级是什么?②无产阶级为什么要革命?③无产阶级在革命胜利后会蜕变成什么阶级?④当今,中国的工人属于无产阶级的范畴吗?原因 韩朝签署开城园区共同委办事处附属协议沙特阿拉伯或因美对叙立场而限制与美国淘金者福音:澳科学家发现可依靠树木寻调查显示韩国人结婚费用高 平均至少3美国男子冲浪遭遇鲨鱼 用拳击技巧击将欧洲盗贼偷多幅世界名画 称怪艺术馆安东京警视厅一警官因涉嫌唆使少女卖淫遭新加坡消费者花数万元上金融课讲师竟是调查:23%美国人通过交友网站找到另中国多地雾气仍未散 内蒙古等地将迎来吉林省雾霾渐退影响仍持续 学校停课面港大研招宣讲会受热捧 考生表示不受““裸煤”污染频遭投诉哈尔滨集中整治“扎龙保护区为大批迁徙候鸟开辟“安全通同济“珠宝鉴赏”课受学生热捧 排名“多名专家围着一人转 疑难杂症、复杂病上海崇明一小学辟菜园 孩子吃自己的种申花高层表态后3场为上海足球而战 不日本遭强台风“韦帕”袭击 多处房屋遭中央财政拨22.2亿元支持健康及养老第八届数独锦标赛在京落幕 中国数独队伦敦动物园一只苏门答腊幼虎坠入水池溺祭苛王神禁守护者赞歌阿修罗王传止战之歌最后的龙骑士夜火蝴蝶风暴魔法师的幸福时光之舞蹈者莲花毁灭长歌莫氏庄园旅游九龙山度假区旅游香水湾旅游清真寺旅游仙霞关旅游拉市海竹筏逍遥游旅游西山龙门旅游西山旅游江苏省美术馆旅游泗水亭公园旅游歌风台旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘