vba模拟键盘鼠标操作和窗口激活

时间:2025-02-23 19:51:05

键盘鼠标操作

Public 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)
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
Public Const MOUSEEVENTF_MIDDLEUP = &H40
Public Const MOUSEEVENTF_ABSOLUTE = &H8000

Type POINTAPI
    x As Long
    y As Long
End Type

Sub saveTextFile()
    Dim Cp As POINTAPI
    GetCursorPos Cp							'save now cursor's address to Cp
    SetCursorPos ,                  'move cursor to Cp's address
    For i = 1 To 2                          'Click 2 times
        mouse_event &H2, 0, 0, 0, 0         'mouse_event &H2 + &H4,left click and up
        mouse_event &H4, 0, 0, 0, 0
    Next
     "abc"
    ' 1
    Application.Wait (Now + TimeValue("0:00:01"))		'sleep 1s
    '  2
     "xyz"
    Application.Wait (Now + TimeValue("0:00:01"))
    For i = 1 To 22
         "^v"			'ctrl+v , paste 20 times
    Next
  
     "^s"				'ctrl+s, save file
     "^p"               'ctrl+p-->print
    'mouse_event &H8 + &H10, 0, 0, 0, 0     'MOUSEEVENTF_RIGHTDOWN and MOUSEEVENTF_RIGHTUP
End Sub

打开窗口

SHELL的第二个参数

常数 描述
vbHide 0 窗口是隐藏的,并且焦点被传递给隐藏窗口。
vbNormalFocus 1 窗口拥有焦点,并且恢复到原来的大小与位置。
vbMinimizedFocus 2 窗口缩小为图符并拥有焦点。
vbMaximizedFocus 3 窗口最大化并拥有焦点。
vbNormalNoFocus 4 窗口被恢复到最近一次的大小与位置。当前活动窗口仍为活动窗口。
vbMinimizedNoFocus 6 窗口缩小为图符。当前活动窗口仍为活动窗口。
'''打开3个记事本,写点内容,再按打开的顺序关闭,不保存。
Sub testAppActivate()
    Dim windowCodeList As New Collection
    For i = 1 To 3
        a = Shell("notepad", 1)
         a
         (a)
        Debug.Print a
    Next i
    For Each i In windowCodeList
        Debug.Print i
        ' (Now + TimeValue("00:00:01"))
        AppActivate i, False
        Application.Wait (Now + TimeValue("00:00:01"))
         "%{f4}"
         "n"
    Next i
End Sub

激活窗口

参数是窗口的标题(可以是本来就打开的窗口)或者shell的返回值(只能是vba用shell打开并拿到返回值)

  • AppActivate “ - 记事本”
  • AppActivate shell的返回值