111,097
社区成员




Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
'测试发送鼠标点击
Dim res As Integer
Win.SetForegroundWindow(hwnd) '窗体激活
'测试鼠标窗体点击
Dim x As Int16 = 58
Dim y As Int16 = 155
Dim pt As New Point(x, y)
Dim lp As Int32 = Helper.ToLParam(x, y)
lp = 10158138 '低16位58,高16位155
MSG.SetCursorPos(x, y) '在网上看到SetCursorPos可以模拟点击制定位置,但本测试不行)
res = MSG.SendMessage(hwnd, WM.WM_LBUTTONDOWN, MouseMK.MK_LBUTTON, lp)
Threading.Thread.Sleep(200)
res = MSG.SendMessage(hwnd, WM.WM_LBUTTONUP, MouseMK.MK_LBUTTON, lp)
End Sub
Public Class MSG
<DllImport("user32", SetLastError:=True)>
Public Shared Function PostMessage(hWnd As IntPtr, Msg As UInteger, wParam As Integer, lParam As Integer) As Boolean
End Function
<DllImport("user32.dll", EntryPoint:="SendMessage", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(hwnd As IntPtr, wMsg As Integer, wParam As Int32, ByRef lParam As Int32) As Int32
End Function
''' <summary>
''' 成功返回非0
''' </summary>
''' <param name="x"></param>
''' <param name="y"></param>
''' <returns></returns>
''' <remarks></remarks>
<DllImport("user32.dll", EntryPoint:="SetCursorPos")>
Public Shared Function SetCursorPos(x As Int32, y As Int32) As Int32
End Function
End Class
'按键消息
Public Enum WM
WM_LBUTTONDOWN = &H201
WM_LBUTTONUP = &H202
BM_CLICK = &HF5
End Enum
Public Enum MouseMK
''' <summary>
''' 鼠标左键
''' </summary>
''' <remarks></remarks>
MK_LBUTTON = &H1
''' <summary>
''' 鼠标右键
''' </summary>
''' <remarks></remarks>
MK_RBUTTON = &H2
''' <summary>
''' 鼠标中键
''' </summary>
''' <remarks></remarks>
MK_MBUTTON = &H10 '
MK_SHIFT = &H4
''' <summary>
''' 键盘Ctrl键
''' </summary>
''' <remarks></remarks>
MK_CONTROL = &H8
End Enum
Public Class Helper
''' <summary>
''' y右移16位
''' </summary>
''' <param name="x"></param>
''' <param name="y"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ToLParam(x As Int32, y As Int32) As Int32
' Return (y << 16) Or (x And &HFFFF)
Return x + (y << 16)
End Function
''' <summary>
''' 返回低16位
''' </summary>
''' <param name="lp"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function LoWord(lp As Int32) As Int16
Dim mask As Int32 = &HFFFF
Return (lp And mask)
End Function
''' <summary>
''' 返回高16位
''' </summary>
''' <param name="lp"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function HiWord(lp As Int32) As Int16
Dim mask As Int32 = &HFFFF
Return (lp >> 16) And mask
End Function
End Class
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_LBUTTONUP Then
Console.WriteLine(m.LParam)
Label1.Text = m.LParam
Label2.Text = LoWord(m.LParam) & " " & HiWord(m.LParam)
End If
End Sub