一般來(lái)說(shuō),關(guān)機(jī)或Logff后,Windows會(huì)傳依序送出WM_QUERYENDsession的信息給每個(gè)PRocess,如果中間有一個(gè)Process不能順利結(jié)束(例如:Word修改后未存檔,而出現(xiàn)是否存檔,但我們按取消),這時(shí)該信息執(zhí)行的結(jié)果會(huì)傳回False(0),這時(shí)Windows也就不再繼續(xù)送WM_QUERYENDSESSION給下一個(gè)Proccess。反之,如果所有的Process都可以順利結(jié)束(也就是每個(gè)送出的WM_QUERYENDSESSION都傳回True),那才代表以以順利結(jié)束。
不管WM_QUERYENDSESSION最后的結(jié)果是可以順利結(jié)束或不能順利結(jié)束,Windows會(huì)再送一個(gè)WM_ENDSESSION的信息給所有的Process,而wParam的內(nèi)容便是指出是否可以順利結(jié)束(True菜單可以,F(xiàn)alse菜單不行,在vb中則CheckwParam=0菜單False,0菜單True),說(shuō)到這里大概就知道該如何做啦,程序如下:
'以下在Form
PrivateSubForm_Load()
DimretAsLong
'記錄原來(lái)的WindowProcedure的位址
preWinProc=GetWindowLong(Me.hwnd,GWL_WNDPROC)
'設(shè)定form的windowProcedure到wndproc
ret=SetWindowLong(Me.hwnd,GWL_WNDPROC,AddressOfwndproc)
EndSub
PrivateSubForm_Unload(CancelAsInteger)
DimretAsLong
'取消Message的截取,而使之又只送往原來(lái)的WindowProcedure
ret=SetWindowLong(Me.hwnd,GWL_WNDPROC,preWinProc)
'這里只是要看看用關(guān)機(jī)的方式結(jié)束程序時(shí),會(huì)不會(huì)執(zhí)行到這里
DimfnoAsLong
fno=FreeFile
Open"c:/tt2"ForAppendAsfno
Print#fno,"ccc" vbCrLf
Close#fno
EndSub
'以下在.Bas
OptionExplicit
DeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
DeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong)AsLong
DeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"_
(ByVallpPrevWndFuncAsLong,ByValhwndAsLong,ByValMsgAsLong,_
ByValwParamAsLong,ByVallParamAsLong)AsLong
PublicConstGWL_WNDPROC=(-4)
PublicConstWM_ENDSESSION=&H16
PublicConstWM_QUERYENDSESSION=&H11
PublicpreWinProcAsLong
PublicFunctionwndproc(ByValhwndAsLong,ByValMsgAsLong,_
ByValwParamAsLong,ByVallParamAsLong)AsLong
IfMsg=WM_QUERYENDSESSIONThen
Debug.Print"QryEnd",wParam,lParam
Else
IfMsg=WM_ENDSESSIONThen
IfwParam0Then'代表將順利關(guān)機(jī)或LogOff,這時(shí)便得做正常結(jié)束程序的操作
DimfnoAsLong
Open"c:/ttt"ForOutputAs#1
Print#1,"hahcccc5"
Close#1
EndIf
EndIf
EndIf
'將之送往原來(lái)的WindowProcedure
wndproc=CallWindowProc(preWinProc,hwnd,Msg,wParam,lParam)
EndFunction
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注