''''''form1 Private Const SWP_HIDEWINDOW = &H80 Private Const SWP_SHOWWINDOW = &H40 Private Const GW_CHILD = 5 Private Const GW_HWNDNEXT = 2 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Sub Command1_Click() Dim cmdHwnd As Long Dim frmHwnd As Long Dim re As RECT Dim X As Long, Y As Long Dim xy As Long
frmHwnd = FindWindow(vbNullString, "Form2")
cmdHwnd = GetMessage(frmHwnd, "", "Command1")
If cmdHwnd > 0 Then GetWindowRect cmdHwnd, re X = re.Left Y = re.Top xy = (X + 5) * 2 ^ 8 + (Y + 5)
SendMessage cmdHwnd, WM_LBUTTONDOWN, xy, 0
SendMessage cmdHwnd, WM_LBUTTONUP, xy, 0 End If End Sub '************************************************************************* '**函 数 名:GetMessage '**输 入:hWnd(Long) - '** :strData(String) - '** :Optional strClass(String = "") - '** :Optional strName(String = "") - '** :Optional strSP(String = "") - '**输 出:(Long) - '**功能描述:获得父窗体下所有子窗体的类名和窗体名 '**全局变量: '**调用模块: '**作 者: '**日 期: '**修 改 人: '**日 期: '**版 本:版本1.0 '************************************************************************* Public Function GetMessage(hwnd As Long, Optional strClass As String = "", Optional strName As String = "", Optional strData As String = "", Optional strSP As String = "") As Long Dim sClass As String * 250 Dim sName As String * 250 Dim hStartbutton As Long Dim lngLen(1) As Long Dim num As Integer Dim strSpace As String
'--------------- If Len(strClass) > 0 Or Len(strName) > 0 Then If Len(strClass) > 0 And Len(strName) > 0 Then If strClass = Left$(sClass, lngLen(0)) And strName = Left$(sName, lngLen(1)) Then GetMessage = hStartbutton Exit Do End If End If If Len(strClass) > 0 Then If strClass = Left$(sClass, lngLen(0)) Then GetMessage = hStartbutton Exit Do End If End If If Len(strName) > 0 Then If strName = Left$(sName, lngLen(1)) Then GetMessage = hStartbutton Exit Do End If End If End If
hStartbutton = GetWindow(hStartbutton, GW_HWNDNEXT) '---------------------- LoopEnd FunctionPrivate Sub Form_Load() Form2.Show End Sub'''''form2 Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) MsgBox "sdfas" ' End Sub
我试了,能触发MouseDown时间,Click事件有些不好触发
‘添以下代码可以触发Click事件 Private Const MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4 Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Sub Command1_Click() Dim cmdHwnd As Long Dim frmHwnd As Long Dim re As RECT Dim x As Long, y As Long Dim xy As Long Dim points As POINTAPI
frmHwnd = FindWindow(vbNullString, "Form2")
cmdHwnd = GetMessage(frmHwnd, "", "Command1")
If cmdHwnd > 0 Then ' GetWindowRect cmdHwnd, re ' X = re.Left ' Y = re.Top ' xy = (X + 5) * 2 ^ 8 + (Y + 5) ' ' SendMessage cmdHwnd, MOUSEEVENTF_ABSOLUTE Or WM_LBUTTONDOWN, xy, 0 ' SendMessage cmdHwnd, MOUSEEVENTF_ABSOLUTE Or WM_LBUTTONUP, xy, 0 ClientToScreen cmdHwnd, points SetCursorPos points.x + 10, points.y + 10
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTDOWN, points.x + 100, points.y + 110, 0, 0 mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTUP, points.x + 100, points.y + 110, 0, 0 End If End Sub
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Sub Command1_Click()
Dim cmdHwnd As Long
Dim frmHwnd As Long
Dim re As RECT
Dim X As Long, Y As Long
Dim xy As Long
frmHwnd = FindWindow(vbNullString, "Form2")
cmdHwnd = GetMessage(frmHwnd, "", "Command1")
If cmdHwnd > 0 Then
GetWindowRect cmdHwnd, re
X = re.Left
Y = re.Top
xy = (X + 5) * 2 ^ 8 + (Y + 5)
SendMessage cmdHwnd, WM_LBUTTONDOWN, xy, 0
SendMessage cmdHwnd, WM_LBUTTONUP, xy, 0
End If
End Sub
'*************************************************************************
'**函 数 名:GetMessage
'**输 入:hWnd(Long) -
'** :strData(String) -
'** :Optional strClass(String = "") -
'** :Optional strName(String = "") -
'** :Optional strSP(String = "") -
'**输 出:(Long) -
'**功能描述:获得父窗体下所有子窗体的类名和窗体名
'**全局变量:
'**调用模块:
'**作 者:
'**日 期:
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function GetMessage(hwnd As Long, Optional strClass As String = "", Optional strName As String = "", Optional strData As String = "", Optional strSP As String = "") As Long
Dim sClass As String * 250
Dim sName As String * 250
Dim hStartbutton As Long
Dim lngLen(1) As Long
Dim num As Integer
Dim strSpace As String
If hwnd < 0 Then Exit Function
If Len(strData) > 0 Then strSpace = strSP + " "
hStartbutton = GetWindow(hwnd, GW_CHILD)
Do
'---------------------
lngLen(0) = GetClassName(hStartbutton, sClass, 250) '取类名
lngLen(1) = GetWindowText(hStartbutton, sName, 250) '取窗体名
If lngLen(0) = 0 And lngLen(1) = 0 Then
Exit Do
End If
num = num + 1
strData = strData + strSpace + Format(num, "0、") + Format(hStartbutton, "0") + "[" + Left$(sClass, lngLen(0)) + "] -- (" + Left$(sName, lngLen(1)) + ")" + vbCrLf
'---------------
If Len(strClass) > 0 Or Len(strName) > 0 Then
If Len(strClass) > 0 And Len(strName) > 0 Then
If strClass = Left$(sClass, lngLen(0)) And strName = Left$(sName, lngLen(1)) Then
GetMessage = hStartbutton
Exit Do
End If
End If
If Len(strClass) > 0 Then
If strClass = Left$(sClass, lngLen(0)) Then
GetMessage = hStartbutton
Exit Do
End If
End If
If Len(strName) > 0 Then
If strName = Left$(sName, lngLen(1)) Then
GetMessage = hStartbutton
Exit Do
End If
End If
End If
'----------------
Call GetMessage(hStartbutton, "", "", strData, strSpace)
hStartbutton = GetWindow(hStartbutton, GW_HWNDNEXT)
'----------------------
LoopEnd FunctionPrivate Sub Form_Load()
Form2.Show
End Sub'''''form2
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "sdfas" '
End Sub
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Sub Command1_Click()
Dim cmdHwnd As Long
Dim frmHwnd As Long
Dim re As RECT
Dim x As Long, y As Long
Dim xy As Long
Dim points As POINTAPI
frmHwnd = FindWindow(vbNullString, "Form2")
cmdHwnd = GetMessage(frmHwnd, "", "Command1")
If cmdHwnd > 0 Then
' GetWindowRect cmdHwnd, re
' X = re.Left
' Y = re.Top
' xy = (X + 5) * 2 ^ 8 + (Y + 5)
'
' SendMessage cmdHwnd, MOUSEEVENTF_ABSOLUTE Or WM_LBUTTONDOWN, xy, 0
' SendMessage cmdHwnd, MOUSEEVENTF_ABSOLUTE Or WM_LBUTTONUP, xy, 0 ClientToScreen cmdHwnd, points
SetCursorPos points.x + 10, points.y + 10
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTDOWN, points.x + 100, points.y + 110, 0, 0
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTUP, points.x + 100, points.y + 110, 0, 0 End If
End Sub
enumchildwindows
getclassname
keybd_event