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