Vbscript CTRL+;1不起作用
Vbscript CTRL+;1不起作用,vbscript,ctrl,Vbscript,Ctrl,.SendKeys方法使用字母数字键盘传输数字。我的键盘(最上面的EscF1…键行下的数字行)的行为如下(使用捷克语键盘输入): °1234567890,带换档 )+与CapsLock合作 )+未经修改的 我可以确认,例如WshShell.SendKeys“^1”(使用Windows脚本主机版本5.8)向活动窗口发送Ctrl+Shift+1击键,就像在键盘上键入一样 我的答案:我需要使用WshShell.SendKeys“^{+}”来模拟键盘Ctrl+1输入 在调用cmd窗口(cscript//
.SendKeys
方法使用字母数字键盘传输数字。我的键盘(最上面的EscF1…键行下的数字行)的行为如下(使用捷克语键盘输入):
°1234567890,带换档
)+与CapsLock合作
)+未经修改的
我可以确认,例如WshShell.SendKeys“^1”
(使用Windows脚本主机版本5.8
)向活动窗口发送Ctrl+Shift+1击键,就像在键盘上键入一样
我的答案:我需要使用WshShell.SendKeys“^{+}”
来模拟键盘Ctrl+1输入
在调用cmd
窗口(cscript//nologo 34189495.vbs
)和在WshShell.SendKeys“^1”之前激活的窗口中,SendKeys
的行为与当前键盘布局(输入法)无关。测试了-Windows显示语言
英语(英国)
,键盘输入法捷克语
/英国
和-显示语言为捷克语,键盘输入法为捷克语 彼此对抗 另一个问题:如何使用
.SendKeys
方法模拟键盘输入Ctrl+2?我不能简单地使用WshShell.SendKeys“^{ě}”
。它不起作用,因为ě
(带caron的拉丁文小写字母E)十六进制值大于0x79
(以及šššýáé
)。根据Microsoft文档,带前缀的扫描代码部分(很抱歉下载链接):
如果使用0xE0
集合中的扫描代码,请确保第二个字节
适用于单字节扫描代码值。换句话说
单词:不大于0x79
,不0x60
或0x61
,不0x00
但是,这里有一个解决方法:WshShell.SendKeys“{NUMLOCK}^{ě}{NUMLOCK}”
(谁知道它为什么会工作?源自我以前使用键盘楔形条形码扫描仪的经验!)
附录:使用我的首选项进行测试
这是我的工作代码:
Option Explicit
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files (x86)\Blackmagic Design\Blackmagic Media Express\MediaExpress.exe""" ,1,true
Wscript.Sleep 100
WshShell.SendKeys "^1"
Set WshShell = Nothing
然后呢?您只是想炫耀您的代码,还是有实际问题?请定义“不工作”。你期望得到什么样的结果?你实际得到了什么样的结果?另外,请注意,
SendKeys
对于应用程序自动化来说是一种糟糕的方法,应该避免使用,除非在枪口下强制使用。@roryap抱歉,我忘了提到,代码不起作用。当我使用SendKeys发送时,Ctrl+1不起作用。@Ansgar预期的结果是:它应该从media express打开“记录并捕获”窗口。“WshShell.SendKeys”^1”没有给我任何东西。你知道除了“SendKeys”以外的其他方法吗?请与我分享。我是新的VB脚本:)从你的代码看,我怀疑键根本没有进入正确的窗口。尝试将WshShell.AppActivate“Media Express”
放在SendKeys
语句之前(用正确的窗口标题替换“Media Express”)。至于其他方法,据我所知,它应该比SendKeys
更可靠、更通用,但我自己没有使用过。感谢@Josefz的良好解释。我尝试了CTRL+1的“WshShell.SendKeys”^{+},但它对我不起作用。我有和你一样的键盘。()在最上面的EscF1…键行下方有数字的行。)。如果您知道解决此问题的任何其他方法,请告诉我。@rrrppp请。我的答案对有效,但我猜例如for将更改为.SendKeys“^{&}”(可能使用{NUMLOCK}
技巧进行修改)。或.SendKeys”^{!}“
有关英语等…谢谢JosefZ,很抱歉迟了回复。我使用的是美式英文键盘,根据布局1是1。它尝试使用1,但仍然不起作用。@rrrppp您是否尝试过代码>建议的感叹号?是的,我也试过了,但运气不好。。你有没有其他方法发送击键或其他想法?
option explicit
'On Error Resume Next
On Error GoTo 0
Dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")
' WshShell.Run omitted, activate existing window (this script open in PSPad)
WScript.Sleep 100
WshShell.AppActivate "34189495.vbs"
WScript.Sleep 200
' Ctrl+Shift+3 set marker #3
WshShell.SendKeys "^3"
WScript.Sleep 100
' Ctrl+1 goto marker #1, i.e. move cursor to that line (pre)marked 1
WshShell.SendKeys "^{+}"
' more time to observe
WScript.Sleep 3000
' Ctrl+3 goto marker #3, i.e. move cursor to that line marked 3
WshShell.SendKeys "{NUMLOCK}^{Š}{NUMLOCK}"
WScript.Sleep 100
' more time before quit
WScript.Sleep 3000
Wscript.Echo Wscript.ScriptName
Wscript.Quit