VBS通过SendKeys设置.lnk快捷方式快捷键时字母键模拟失效求解
问题描述
使用VBS脚本为.lnk快捷方式设置组合快捷键时出现异常:
- 快捷方式属性面板的「快捷键」输入栏无法接收模拟发送的字母按键,触发后仅识别为
Pause键 Enter、Tab、Esc类功能键模拟发送正常,可正常完成切换输入行、关闭属性窗口等操作

原测试脚本
set WshSHell = Wscript.CreateObject("WScript.Shell") WshShell.SendKeys "{1}" *为简化测试,目标快捷方式命名为"1"* WshShell.SendKeys "+{F10}" *模拟鼠标右键点击操作* WshShell.SendKeys "{UP}" *选中右键菜单中的「属性」选项* WshShell.Sendkeys"{ENTER}" WScript.Sleep 500 *等待属性窗口加载弹出* WshShell.SendKeys "{TAB 2}" *切换焦点到「快捷键」输入栏* WshShell.SendKeys "{G}" *此处字母键发送无预期效果* WshShell.SendKeys "{ENTER}"
故障原因
- 系统规则限制:Windows本身不支持给快捷方式设置无修饰键的单字母/单数字快捷键,快捷键输入栏默认拦截无修饰键的普通字符模拟输入,无有效修饰键的字符输入会被判定为无效,默认映射为
Pause键 - 脚本存在隐性bug:首行定义的变量名为
WshSHell,后续调用写为WshShell,大小写不一致在部分环境下会触发运行错误;500ms的窗口等待时长过短,系统负载高时会出现焦点切换失败问题
解决方案
优先使用直接操作快捷方式对象的方案,完全绕过UI模拟的兼容问题,稳定性最高:
Set WshShell = WScript.CreateObject("WScript.Shell") ' 替换为目标快捷方式的完整绝对路径 lnkFullPath = "C:\Users\当前用户名\Desktop\1.lnk" Set shortcut = WshShell.CreateShortcut(lnkFullPath) ' 快捷键必须包含至少一个Ctrl/Alt/Shift修饰键,按需修改即可 shortcut.Hotkey = "Ctrl+Alt+G" shortcut.Save
如果必须使用UI模拟的方式实现,发送按键时附带符合规则的修饰键,同时补全操作间隔等待即可:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "{1}" WScript.Sleep 100 WshShell.SendKeys "+{F10}" WScript.Sleep 100 WshShell.SendKeys "{UP}" WScript.Sleep 100 WshShell.SendKeys "{ENTER}" WScript.Sleep 1000 WshShell.SendKeys "{TAB 2}" WScript.Sleep 100 ' ^对应Ctrl,%对应Alt,+对应Shift,按需组合修饰键即可 WshShell.SendKeys "^%{G}" WScript.Sleep 100 WshShell.SendKeys "{ENTER}"
内容的提问来源于stack exchange,提问作者Nawad-sama
相关产品推荐
相关产品推荐

