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

公司限制直接打开osk.exe,如何用VBA宏触发其快捷键?

实现VBA触发Windows+Ctrl+O打开屏幕键盘(osk.exe)

可以通过调用Windows API模拟按键来实现需求,VBA自带的SendKeys无法直接模拟Windows键,使用API的keybd_event函数是更可靠的方案。

完整代码示例

' 声明Windows API函数(兼容64位Office)
Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr _
)

' 按键常量定义
Const VK_LWIN = &H5B   ' 左Windows键
Const VK_CONTROL = &H11 ' Ctrl键
Const VK_O = &H4F      ' O键
Const KEYEVENTF_KEYUP = &H2 ' 按键释放标识

Sub TriggerOSKShortcut()
    Dim Condition As Boolean
    Condition = True ' 替换为你的实际判断条件
    
    If Condition = True Then
        ' 依次按下组合键
        keybd_event VK_LWIN, 0, 0, 0
        keybd_event VK_CONTROL, 0, 0, 0
        keybd_event VK_O, 0, 0, 0
        
        ' 按相反顺序释放按键(避免按键锁定)
        keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub

代码说明

  • 若使用32位Office,需删除PtrSafe关键字,并将LongPtr替换为Long。
  • 必须严格按按下顺序的相反顺序释放按键,否则可能导致系统按键处于持续按下状态。
  • 也可将VK_LWIN替换为VK_RWIN = &H5C(右Windows键),效果一致。

注意事项

  1. 需在Office信任中心启用宏(或添加文件到信任位置),否则代码无法执行。
  2. 部分企业安全软件可能拦截API调用,若执行失败需确认安全规则是否允许VBA调用系统API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:44:58