;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
鍏虫満娑堟伅鐨勬嫤鎴 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VB >> VBAPI >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

鍏虫満娑堟伅鐨勬嫤鎴

鍙戝竷: 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

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆