鍏虫満娑堟伅鐨勬嫤鎴
鍙戝竷: 2008-7-15 14:20 | 浣滆: 缃戠粶杞浇 | 鏉ユ簮: 缃戠粶杞浇 | 鏌ョ湅: 16娆
鍏虫満娑堟伅鐨勬嫤鎴
鍦ㄥ叧鏈烘垨Logff鍓嶄俊鎭殑鎷︽埅
銆銆濡傛灉鎴戜滑鍏虫満鎴朙ogoff鏃讹紝鎴戜滑鐨勭▼搴忔湁鏃朵細鍥犺屾棤娉曟寜姝e父绋嬪簭缁撴潫锛屼竴鑸垜浠細鍦‵orm鐨刄nload涓竴娈电▼搴忕粨鏉熸椂瑕佸仛浠涔堜簨锛屼絾鏄紝濡傛灉浣跨敤鑰呯洿鎺ョ敤寮濮嬪姛鑳借彍鍗曠殑鍏虫満锛屼細浣縐nLoad鐨勯儴浠芥病鏈夊仛鍒帮紝鎴戜滑鐜板湪灏辨兂鍔炴硶鏉ユ嫤鎴叧鏈(鎴朙ogoff)鏃剁殑淇℃伅銆
銆銆涓鑸潵璇达紝鍏虫満鎴朙ogff鍚庯紝Windows浼氫紶渚濆簭閫佸嚭WM_QUERYENDSESSION鐨勪俊鎭粰姣忎釜Process锛屽鏋滀腑闂存湁涓涓狿rocess涓嶈兘椤哄埄缁撴潫(渚嬪锛歐ord淇敼鍚庢湭瀛樻。锛岃屽嚭鐜版槸鍚﹀瓨妗o紝浣嗘垜浠寜鍙栨秷)锛岃繖鏃惰淇℃伅鎵ц鐨勭粨鏋滀細浼犲洖False(0)锛岃繖鏃禬indows涔熷氨涓嶅啀缁х画閫乄M_QUERYENDSESSION缁欎笅涓涓狿roccess銆傚弽涔嬶紝濡傛灉鎵鏈夌殑Process閮藉彲浠ラ『鍒╃粨鏉(涔熷氨鏄瘡涓佸嚭鐨刉M_QUERYENDSESSION閮戒紶鍥濼rue)锛岄偅鎵嶄唬琛ㄤ互浠ラ『鍒╃粨鏉熴
銆銆涓嶇WM_QUERYENDSESSION鏈鍚庣殑缁撴灉鏄彲浠ラ『鍒╃粨鏉熸垨涓嶈兘椤哄埄缁撴潫锛學indows浼氬啀閫佷竴涓猈M_ENDSESSION鐨勪俊鎭粰鎵鏈夌殑Process锛岃寃Param鐨勫唴瀹逛究鏄寚鍑烘槸鍚﹀彲浠ラ『鍒╃粨鏉(True鑿滃崟鍙互锛孎alse鑿滃崟涓嶈锛屽湪vb涓垯CheckwParam = 0 鑿滃崟False 锛0鑿滃崟True)锛岃鍒拌繖閲屽ぇ姒傚氨鐭ラ亾璇ュ浣曞仛鍟︼紝绋嬪簭濡備笅锛
銆銆
鈥欎互涓嬪湪Form
Private Sub Form_Load()
銆Dim ret As Long
銆鈥欒褰曞師鏉ョ殑Window Procedure鐨勪綅鍧
銆preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
銆鈥欒瀹歠orm鐨剋indow Procedure鍒皐ndproc
銆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
銆鈥欏彇娑圡essage鐨勬埅鍙栵紝鑰屼娇涔嬪張鍙佸線鍘熸潵鐨刉indow 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 鈥欎唬琛ㄥ皢椤哄埄鍏虫満鎴朙ogOff锛岃繖鏃朵究寰楀仛姝e父缁撴潫绋嬪簭鐨勬搷浣
銆銆銆銆銆Dim fno As Long
銆銆銆銆銆Open "c:\ttt" For Output As #1
銆銆銆銆銆Print #1, "hahcccc5"
銆銆銆銆銆Close #1
銆銆銆End If
銆銆End If
銆End If
銆鈥欏皢涔嬮佸線鍘熸潵鐨刉indow Procedure
銆wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function




发表于 2009-1-5 19:48
| 











