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

关机消息的拦截 -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
云端测试破1500万 Testin已为开发者省2亿 智能腕表inWatch:已发售近3600台 Bingo!微软证实Windows 8.1将捆绑安装Skype IBM宣布收购以色列网络安全公司Trusteer 约10亿美元 如何才能运作好一个开源项目? 为什么JavaScript有能力成为未来企业级编程语言? Red Hat CEO:拥抱开源 拥抱克隆 小米手机-HAXLR8on硬件黑客马拉松 开团了! 移动周报:雷军做红米的N个理由 Pangea Software CEO:08年App Store游戏降价大战的真相 揭秘MongoDB最新Java驱动:更好的JVM支持,指日可期的异步 不仅只有IE Mozilla将于发布Win8平台Metro版Firefox 360搜索发布新产品“我的搜索” 引入网民评价和网站名片功能 AppScale:Google App Engine的开源实现 近期十大优秀jQuery插件推荐 通过语音识别来编程 速度远超键盘 BrowserStack:多系统跨浏览器兼容性测试工具API发布 更加开放?Path向13家应用开发商开放API 重金力邀开发者 联想智能桌面应用开发大赛开幕 SDCC 2013大会讲师名单议题出炉 8月20日五折票价最后一天 程序员困境:底层编码能力正逐步丧失 寓教于乐 给代码审查者的几点建议 裁员4千、总裁员人数超过7.5万,难掩思科锋芒 物联网离普罗大众还有多远? 悼念斯诺登使用的加密电邮服务——Lavabit架构解析 运营商上阵OTT “一笑泯恩仇”后路在何方 [企业开源系列]后起之秀Facebook凭什么挑战互联网霸主Google? 谷歌推出免费标签管理应用Tag Manager McAfee CTO Phyllis Schneck被任命为NPPD副部长 Bootstrap 3.0发布 更好地支持移动端和响应式开发 国内创业公司QingCloud的魄力:做一个世界级的IaaS服务 关于stringgrid的问题????? 痛苦啊,难道要放弃BCB吗? 大家认为在开发过程中是否不能用全局变量? 如何让LINUX支持我显卡 高手,谁来帮我一下~! 取字符 在SDK中,如何获得客户区的宽度和高度呢??(哪两个函数呢?) 哪里有ATL的电子书下载?最好是中文的! 高手谁能帮帮我呀~~~~~~~! 请教:如何在statusbar的panel中显示一个图标呢? VC++中如何使用OLE对象? 初来乍到,发现这儿JJMM还挺多的。。。 请高人指教~! CSDN中碰到这种问题,该如何解决呢? 如何学习director 你能帮我一下吗?~ 企业商务管理软件,开放全部的源代码及开发文档! 企业管理软件,全套源码及开发文档!!!! 哪里有支持任何波特率的通讯控件下载? net_lover(孟子E章)请进~! 一个有关CWebBrowser的问题,急急急!!! 这样的语句为什么不可以实现一次删除多条记录 plmm是什么意思? 各位大侠,知道哪儿有直接可用的上传文件的控件吗? 多谢了!!! 论坛的题目是不是太没意思了 一个sqlserver7统计的问题?? varchar类型不是可以输入255个字符吗,为什么我输了160个就出现'item XXX doesn't pass validation test ' 唉 ~~~~~ 奈何 ~~~~~ 突然想到个荒唐的问题: 事件和过程有什么不同? 奇怪的事前,高手请进来 我的问题还没有解决~! 这里的高手呢,人听多,会的人不多 申奥倒计时,如果你在线,请进来验证这以历史性时刻,谢谢 我有一个用hook截获鼠标移动的dll,但是没有效果,请问怎么调试? 请教,怎样在java中把Button的背景改做一个图片 对delphi5一个自带例题的疑问。 爆炒MM之水园MM ID一览 窗体和控件的自适应问题? 求《unix》环境高级编程的源程序下载。 在MIS或WEB中有大量的对数据操作的工作,是否所有的insert,update,delete工作都需lock and unlock??? 紧急求助:那里有pb7的最新版本下载(mark200106@sina.com) 感谢stanely :) 哪里有《unix环境高级编程》所带的源程序下载? 关于quickrep得统计问题,为什么我只能把所有的数据累加而不能累加一个grouphead和groupfoot之间的数据 关于ATL做ActiveX控件的问题 关于jc文件的问题 请问:在用ADO执行查询操作时,如出现“超时”错误,应该有哪些解决办法? 帮忙算一下JB5的激活代码,呵呵 模板问题 软件发布:捉图王 DirectX 的编程问题小 已知角α的终边上有一点的坐标是P(3a,4a),其中a≠0,求α的三角函数值 当a=-2时,a+2a+3a+4a+.+100a= -化简求值2/3a-{1/3-[(3a²-5a+1)]},其中a=3 已知角a的中终边上有一点坐标p(3a,4a) a不等于0 求sina cosa tana 的三角函数如题 考试中 a= 2,a+2a+3a+4a+...+100A=? 化简求值2/3a-{1/3-[(3a²-5a+1)-1/3a-5]} 设a<0,角阿尔法的终边经过点P(-3a,4a),那么sin阿尔法+2cos阿尔法的值等于 5(3a方b-ab方)-4(-3ab方+2a方b),其中A等于-2,B等于3化简求值 化简求值2(3a-1)-3(2-5a+3a²),其中a=负三分之一,其结果为多少? 已知角α的终边经过点P(4a,-3a)(a≠0),求2sinα+cosα的值? 化简 3a²×根号下2/a 化简求值:(-5-a²+3a)+(-a²-5a+4)其中a=-1/2 设角α的终边上有一点P(-4a,3a)(a≠0),则2sinα+cosα的值是( ) 怎么求? 求解过程,急!给悬赏!先化简,后计算:81-a²/a²+6a+9÷9-a/2a+6×1/a+9,其中a=根号3-3 5a²+[a²+(5a²-2a)-2(a²-3a)]其中a=-1/2 先化简再求值1/2(x²-y²)-4(2x²-3y²)其中x=-3y=2 已知角a的终边上有一点P(3a,4a) (a 已知根号2a-3+b=4,化简根号a²-2a+1-根号b²-8b+16 先化简,后求值:(5a²-3b²)+(a²+b²)-(5a²+3b²),其中a=-1,b=1. 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 已知b 先化简,在求值 5a²+3b²+2(a²-b²)-(5a²-3b²),其中a=-1,b=1/2 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 已知:a<0,化简:根号下4-(a+a分之一)²-根号下4-(a-a分之一)² 先化简再求值(5a²-3b²)+(a²+b²)-(5a²+3b²)其中a=-1 b=1 已知角B的终边过点P(-4a,3a)Simb.cos b.tan b谁知道怎么整啊 已知a=1-根号2,先化简,再求(a²-1)/(a²+a)+根号( a²-2a+1)/(a²-a)值老师讲的答案和我算的不一样,求过程 化简:1、-5a²(3ab²-6a³);2、[x(x²y²-xy)-y(x²-x³y)]÷3x²y;3、已知(a的n次方b的m+1次方)³=a的9次方b的15次方,则m的n次方=? sin²a+cosˇ4a+sin²acos²a 化简 若a²-3a=9,则2a²-6a+3的值是-----------------. 先化简 在求值3a^3-6a^2b/a^2b-2ab^2 ,其中a=3,b=1 2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢 打不出这个符号 a-²b-³·﹙-3a﹣¹b﹣²﹚÷6a﹣⁴b﹣²的结果是?请带上过程.(-²这个是负二次方,其余的也是这样) 化简(a+b)(a-b)-(3a-2b)(3a+2b) 求证[1]1-2sin acos a/cos²a -sin²a =1-tan a/1+tan a.[2]1-cos 2θ/1+cos 2θ=tan²θ 若√a²-3a+1 +b²+2b+1=0,求3a²-6a+1/a²-(-b)²的值.若√a²-3a+1 +b²+2b+1=0,求3a²-6a+1/a²-(-b)²的值。 化简 |a+b|-|3a-2b|a sin∨4a-cos∨4a=sin²a-cos²a 求证 下列各式计算正确的是A(-3a²b)(-2ab²)=6a³b²B(﹣2×10)²×(6×10³)=1.2×10的5次方C﹣2a²(2分之1ab-b²)=﹣a³b-2a²b² D(﹣ab²)³=﹣a³b的6次方,若ab²= 化简(3a+2b)(2a+b)-(2b+a)(b+a) 证明:sinα^2+sinβ^2-sinα^2sinβ^2+cosα^2cosβ^2=1 已知a²+b²-6a+8b+25=0,求3a+4b的值. 当a>0,b 证明:1-2sinα cosα/cos^2α -sin^2α=1-tanα/1+tanα 因式分解:(3a+2b)²-(3a-2b)²和9x²-4y² 化简求值 (3a+1)(3a-1)-(2a-3)(3a+2),其中2=4分之一 证明[2-2sin(α+3π/4)cos(α+π/4)]/(cos^4α-sin^4α)=(1+tanα)/(1-tanα) 6a²-9ab+3a 因式分解 化简求值:3a(a^2-2a+1)-2a^2(a-3),其中a=2分之3 三角函数sin、cos、tan各等于什么边比什么边? 证明sin^4α-cos^4α=2sinα²-1 因式分解3a²-5ab+2b²加上:若多项式f(x)=x的四次方-x的三次方+ax²+bx+c能被(x-1)的三次方整除,求a,b,c的值设abc是三角形的三条边,则a的四次方+b的四次方+c的四次方-2a²b²-2b²c² 我要sin.cos.tan三角函数表,只要30°45°60°.是要根号的,不要有小数点的 证明(1-2sinθcosθ)/(cos^2θ-sin^2θ)=(cos^2θ-sin^2θ)/(1-2sinθcosθ) 化简5a^2-[a^2+(5a^2-2a)-2(a^2-3a)] 三角函数问题 sin与cos和tan怎么转换比如sin150度,为什么等于sin30度,cos150度为什么等于-cos30度 当a=-2时,a+2a+3a+4a.+100a等于多少 5a²+[a²+(5a²-2a)-2(a2-3a)],a=-二分之一 先化简再求值 已知角阿尔法的终边上有一点p的坐标是(3a,4A),其中a不等于0,求三角函数值.这道题为什么先求半径 不是求函数值都是按单位圆半径为1算的吗? a=-2时,a+2a+3a+4a+.+100a等于多少 化简求值:5a^2+[2a^2+(5a^2-2a)-2(a^2-3a)],其中a=-1/2
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn