VB 捕獲系統登出 關機事件

2021-08-25 07:04:19 字數 2235 閱讀 7851

正文開始:

目前網上,能夠截獲系統登出、關機事件訊息的vb**,非常少,即便是有,作者也大多胡亂拷貝,不是很負責任。

本文作者經過3個小時的辛苦努力,終於搞定這兩個小問題,本**在vb6.0環境下測試通過,僅有3步,直接複製即可使用,希望能給在網路中苦苦追尋的網友,帶來福音。

1、先建一bas模組檔案,此處為public.bas,**如下:

'專門用於處理登出、關機訊息截獲及處理事件__開始

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 '如果是登出

'在這裡,你可以加一些自定義操作

end'程式退出,防止使用者因為本程式未退出而無法登出。

else

if msg = wm_endsession then '如果是關機

if wparam = 0 then '代表將順利關機或logoff,這時便得做正常結束程式的操作

'在這裡,你可以加一些自定義操作

end'程式退出,防止使用者因為本程式未退出而無法關機。

end if

end if

end if

'將之送往原來的window procedure

wndproc = callwindowproc(prewinproc, hwnd, msg, wparam, lparam)

end function

'專門用於處理登出、關機訊息截獲及處理事件__結束

2、然後在form_load()事件中新增如下**:

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

3、最後在form_unload()事件中新增如下**:

private sub form_unload(cancel as integer) '用於捕獲使用者登出,關機等強退事件

'專門用於處理登出、關機訊息截獲及處理事件__開始

dim ret as long

'取消message的擷取,而使之又只送往原來的window procedure

ret = setwindowlong(me.hwnd, gwl_wndproc, prewinproc)

'這裡只是要看看用關機的方式結束程式時,會不會執行到這裡

'專門用於處理登出、關機訊息截獲及處理事件__結束

end sub

**:

C 新增登出關閉事件捕獲

有的時候程式在執行時需要獲取windows的關機或登出事件以處理一些後續問題這裡提供乙個方法,使用setconsolectrlhandler這個api獲取系統訊息。函式原型 dllimport kernel32.dll private static extern bool setconsolectr...

捕獲異常 學習VB程式設計第47天,異常捕獲機制

今天學習了劉金玉老師零基礎vb教程的第57期,學習的主要內容是try catch finally異常捕獲機制。1.異常捕獲 就是對程式 中一些錯誤進行處理。方便我們排除錯誤 提公升使用者使用程式效果。2.語法解釋 try開始嘗試異常捕獲 catch將捕獲到的異常進行處理 finallly最後不會發生...

VB6相關資源

也許,又要撿起vb6了,做維護!複習一下!1,基礎 常用快捷鍵 f4 檢視物件的屬性 f5 開始執行 除錯 f8 單步除錯 f7 進入 模式 home 定位到當前 行的行首 end 定位到當前 行的行末 shift f7 進入設計模式 shift f2 檢視某函式 變數的定義 shift f3 查詢...