'窗体Form1代码。 '再添加一个窗体Form2。 Option ExplicitPrivate Sub Form_Load() Form2.Show HookForm Me.hwnd End SubPrivate Sub Form_Unload(Cancel As Integer) UnHookForm Me.hwnd End Sub '标准模块 Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 WM_MOVE = &H3& Public Const GWL_WNDPROC = -4 Public PrevProc As Long Public Sub HookForm(F As Long) PrevProc = SetWindowLong(F, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnHookForm(F As Long) If PrevProc Then SetWindowLong F, GWL_WNDPROC, PrevProc PrevProc = 0 End If End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOVE Then Form2.Move Form1.Left + 3000, Form1.Top + 3000 End If WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam) End Function
然后移动另一个窗口。
'再添加一个窗体Form2。
Option ExplicitPrivate Sub Form_Load()
Form2.Show
HookForm Me.hwnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHookForm Me.hwnd
End Sub
'标准模块
Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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 WM_MOVE = &H3&
Public Const GWL_WNDPROC = -4
Public PrevProc As Long
Public Sub HookForm(F As Long)
PrevProc = SetWindowLong(F, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(F As Long)
If PrevProc Then
SetWindowLong F, GWL_WNDPROC, PrevProc
PrevProc = 0
End If
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_MOVE Then
Form2.Move Form1.Left + 3000, Form1.Top + 3000
End If
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
End Function