'这是一个鼠标模拟点击开始菜单的例子,你可以参考程序中的连续点击的过程。
'在窗体上加入控件timer1(interval=1000),然后在窗体代码区复制下面代码,运行,即可看到效果。
'====窗体代码区====
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
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 Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long
Private Enum MouseClick '定义鼠标常数
MOUSEEVENTF_LEFTDOWN = &H2
MOUSEEVENTF_LEFTUP = &H4
MOUSEEVENTF_RIGHTDOWN = &H8
MOUSEEVENTF_RIGHTUP = &H10
MOUSEEVENTF_MIDDLEDOWN = &H20
MOUSEEVENTF_MIDDLEUP = &H40
End Enum
Private Const INPUT_MOUSE = 0
Private Const INPUT_KEYBOARD = 1
Private Const INPUT_HARDWARE = 2
Private Type MOUSEINPUT
dx As Long
dy As Long
mouseData As Long
dwFlags As Long
dwtime As Long
dwExtraInfo As Long
End Type
Private Type INPUT_TYPE
dwType As Long
xi(0 To 23) As Byte
End Type
Dim tp_X As Single, tp_Y As Single
Dim ClkIndex As Integer
Dim OpCtWin As Integer
Private Sub VirtualClickMouse(ButtonPressed As MouseClick, Optional ButtonRelease As MouseClick)
Dim intX As Integer
Dim inputEvents(0 To 1) As INPUT_TYPE ' 锁定事件信息
Dim mouseEvent As MOUSEINPUT '临时锁定鼠标输入信息
mouseEvent.dx = 0 ' 不水平运动
mouseEvent.dy = 0 ' 不垂直运动
mouseEvent.mouseData = 0
mouseEvent.dwFlags = ButtonPressed ' 按键按下
mouseEvent.dwtime = 0 ' 缺省
mouseEvent.dwExtraInfo = 0 ' 非必须
' 复制结构到输入数组缓冲区
inputEvents(0).dwType = INPUT_MOUSE ' 鼠标输入
CopyMemory inputEvents(0).xi(0), mouseEvent, Len(mouseEvent)
' 相上, 放开鼠标按钮。
mouseEvent.dx = 0
mouseEvent.dy = 0
mouseEvent.mouseData = 0
mouseEvent.dwFlags = ButtonRelease ' 按键抬起
mouseEvent.dwtime = 0
mouseEvent.dwExtraInfo = 0
inputEvents(1).dwType = INPUT_MOUSE
CopyMemory inputEvents(1).xi(0), mouseEvent, Len(mouseEvent)
intX = SendInput(2, inputEvents(0), Len(inputEvents(0))) '
End Sub
Sub MoveMouse(X As Single, Y As Single)
Dim pt As POINTAPI
pt.X = X
pt.Y = Y
ClientToScreen hwnd, pt
SetCursorPos pt.X, pt.Y
End Sub
Private Sub Form_Load()
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2
ClkIndex = 0
OpCtWin = 0
End Sub
Private Sub Timer2_Timer()
Select Case OpCtWin
Case Is = 0
tp_X = (-Me.Left / Screen.TwipsPerPixelX) + 40
tp_Y = (Me.Top + Me.Height) / Screen.TwipsPerPixelY - 20
Case Is = 1
tp_X = (-Me.Left / Screen.TwipsPerPixelX) + 40
tp_Y = (Me.Top + Me.Height) / Screen.TwipsPerPixelY - 50
End Select
MoveMouse tp_X, tp_Y
VirtualClickMouse MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP
OpCtWin = OpCtWin + 1
If OpCtWin > 1 Then
OpCtWin = 0
Timer2.Enabled = False
Unload Me
End If
End Sub
通过键盘输入一个自然数,求该数的因子数
学习下