You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中如何用Application.SendKeys发送Windows键?含窗口最大化需求

用VBA通过Windows API模拟Win+Up组合键最大化窗口

Excel的Application.SendKeys不支持直接发送Windows键,你用^({ESC}{UP})模拟Win+Up的思路行不通——因为Ctrl+Esc只是触发开始菜单,并非持续按住Win键的状态。不用依赖AutoIt这类外部工具,直接调用Windows API就能实现需求。

实现步骤

  1. 声明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 '上箭头键
    
  2. 编写模拟按键的过程
    下面的自定义过程会模拟按下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
    
  3. 使用方法
    打开Excel的VBA编辑器(Alt+F11),插入一个标准模块,把上面的代码全部粘贴进去,直接运行MaximizeActiveWindow过程,就能触发Win+Up组合键,最大化当前活动窗口。

补充说明

  • SendInput是比旧的keybd_event更可靠的API,它能正确模拟键盘输入的顺序和状态;
  • 代码里用的是左Windows键(VK_LWIN),如果需要用右Windows键,把常量改成VK_RWIN = &H5C即可。

内容的提问来源于stack exchange,提问作者Pramod Pandit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:35:18