公司限制直接打开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键),效果一致。
注意事项
- 需在Office信任中心启用宏(或添加文件到信任位置),否则代码无法执行。
- 部分企业安全软件可能拦截API调用,若执行失败需确认安全规则是否允许VBA调用系统API。
内容的提问来源于stack exchange,提问作者Almesi
相关产品推荐
相关产品推荐

