Private Declare Function GetActiveWindow Lib "user32" () As Long Private Sub Timer1_Timer() If GetActiveWindow() <> hWnd Then End End Sub 设置timer1时间间隔为几百毫秒,呵呵~~~,给分吧!这样我试过,可以!
呵呵,用TIMER当然可以了,我设的interval为10,但这样会增大系统开销。 给出另一种方法: Module: Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongDeclare 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 LongPublic Const GWL_WNDPROC = (-4) Public Const WM_ACTIVATE = &H6 Public preWinProc As LongPublic Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongIf Msg = WM_ACTIVATE Then If wParam = 0 Then Unload Form1 End If wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam) End Function Form: Private Sub Form_Load() Dim ret As Long preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC) ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf wndproc) End SubPrivate Sub Form_Unload(Cancel As Integer) Dim ret As Long ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, preWinProc) End Sub
你试一试,unload 窗体名
Unload Form1
End Sub
真的不行啊!我切换窗口后根本就不会unload
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Form_Deactivate()
Unload Me
End Sub
要想实现这个功能,需要调用系统API了。因为切换焦点到操作系统上,已经超出你程序的控制范围了。
Private Sub Timer1_Timer()
If GetActiveWindow() <> hWnd Then End
End Sub
设置timer1时间间隔为几百毫秒,呵呵~~~,给分吧!这样我试过,可以!
给出另一种方法:
Module:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongDeclare 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 LongPublic Const GWL_WNDPROC = (-4)
Public Const WM_ACTIVATE = &H6
Public preWinProc As LongPublic Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongIf Msg = WM_ACTIVATE Then
If wParam = 0 Then Unload Form1
End If
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
Form:
Private Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf wndproc)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, preWinProc)
End Sub