VBA中如何用Application.SendKeys发送Windows键?含窗口最大化需求
用VBA通过Windows API模拟Win+Up组合键最大化窗口
Excel的Application.SendKeys不支持直接发送Windows键,你用^({ESC}{UP})模拟Win+Up的思路行不通——因为Ctrl+Esc只是触发开始菜单,并非持续按住Win键的状态。不用依赖AutoIt这类外部工具,直接调用Windows API就能实现需求。
实现步骤
声明Windows API函数
先在VBA模块里声明SendInput函数及相关常量(兼容32位和64位Office):#If VBA7 Then Declare PtrSafe Function SendInput Lib "user32.dll" (ByVal nInputs As LongPtr, pInputs As Any, ByVal cbSize As LongPtr) As LongPtr Type INPUT dwType As Long dx As Long dy As Long mouseData As Long dwFlags As Long time As Long dwExtraInfo As LongPtr End Type Type KEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long time As Long dwExtraInfo As LongPtr End Type #Else Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT, ByVal cbSize As Long) As Long Type INPUT dwType As Long dx As Long dy As Long mouseData As Long dwFlags As Long time As Long dwExtraInfo As Long End Type Type KEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long time As Long dwExtraInfo As Long End Type #End If Const INPUT_KEYBOARD = 1 Const KEYEVENTF_KEYUP = &H2 Const VK_LWIN = &H5B '左Windows键 Const VK_UP = &H26 '上箭头键编写模拟按键的过程
下面的自定义过程会模拟按下Win+Up,然后松开按键:Sub MaximizeActiveWindow() Dim inputArray(0 To 3) As INPUT '按下左Windows键 inputArray(0).dwType = INPUT_KEYBOARD inputArray(0).KEYBDINPUT.wVk = VK_LWIN '按下Up键 inputArray(1).dwType = INPUT_KEYBOARD inputArray(1).KEYBDINPUT.wVk = VK_UP '松开Up键 inputArray(2).dwType = INPUT_KEYBOARD inputArray(2).KEYBDINPUT.wVk = VK_UP inputArray(2).KEYBDINPUT.dwFlags = KEYEVENTF_KEYUP '松开左Windows键 inputArray(3).dwType = INPUT_KEYBOARD inputArray(3).KEYBDINPUT.wVk = VK_LWIN inputArray(3).KEYBDINPUT.dwFlags = KEYEVENTF_KEYUP '发送输入 #If VBA7 Then SendInput 4, inputArray(0), LenB(inputArray(0)) #Else SendInput 4, inputArray(0), Len(inputArray(0)) #End If End Sub使用方法
打开Excel的VBA编辑器(Alt+F11),插入一个标准模块,把上面的代码全部粘贴进去,直接运行MaximizeActiveWindow过程,就能触发Win+Up组合键,最大化当前活动窗口。
补充说明
SendInput是比旧的keybd_event更可靠的API,它能正确模拟键盘输入的顺序和状态;- 代码里用的是左Windows键(
VK_LWIN),如果需要用右Windows键,把常量改成VK_RWIN = &H5C即可。
内容的提问来源于stack exchange,提问作者Pramod Pandit
相关产品推荐
相关产品推荐

