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

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}"
故障原因
  1. 系统规则限制:Windows本身不支持给快捷方式设置无修饰键的单字母/单数字快捷键,快捷键输入栏默认拦截无修饰键的普通字符模拟输入,无有效修饰键的字符输入会被判定为无效,默认映射为Pause键
  2. 脚本存在隐性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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:12:31