键盘鼠标操作
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的返回值