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

本文介绍使用VBA进行键盘鼠标自动化操作的方法,包括鼠标点击、移动、按键发送及文件保存等操作。通过调用Windows API函数实现自动化流程,适用于批量处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

键盘鼠标操作

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 Cp.x, Cp.y                 '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
    Application.SendKeys "abc"
    'Debug.Print 1
    Application.Wait (Now + TimeValue("0:00:01"))		'sleep 1s
    ' Debug.Print 2
    Application.SendKeys "xyz"
    Application.Wait (Now + TimeValue("0:00:01"))
    For i = 1 To 22
        Application.SendKeys "^v"			'ctrl+v , paste 20 times
    Next
  
    Application.SendKeys "^s"				'ctrl+s, save file
    Application.SendKeys "^p"               'ctrl+p-->print
    'mouse_event &H8 + &H10, 0, 0, 0, 0     'MOUSEEVENTF_RIGHTDOWN and MOUSEEVENTF_RIGHTUP
End Sub

打开窗口

SHELL的第二个参数

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

激活窗口

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

  • AppActivate “1.txt - 记事本”
  • AppActivate shell的返回值
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值