是否可以将命令放入批处理文件中,该文件将文本输入到指定的窗口中,并按下回车键,就好像用户正在与之交互一样?是否有批量代码更改为另一个特定窗口的命令?
我知道一个叫做“keystuff”的方便的小exe文件,它能够改变窗口并插入文本,但我无法找到它能够指定哪个窗口改变的地方,因为它只是使用Alt +选项卡来更改窗口。
是否可以将命令放入批处理文件中,该文件将文本输入到指定的窗口中,并按下回车键,就好像用户正在与之交互一样?是否有批量代码更改为另一个特定窗口的命令?
我知道一个叫做“keystuff”的方便的小exe文件,它能够改变窗口并插入文本,但我无法找到它能够指定哪个窗口改变的地方,因为它只是使用Alt +选项卡来更改窗口。
你可以,但不完全可靠,而不是纯粹的批次。您可以使用Wscript.Shell
COM对象的AppActivate
和SendKeys
方法。 AppActivate
可让您通过其PID或其标题将焦点更改为另一个窗口。当通过窗口标题进行对焦时,首先按照完整标题,标题开始,然后是标题结束按顺序进行比赛。因此,例如,如果您想向Firefox发送按键,则只需shellObj.AppActivate('Firefox')
(因为Firefox标签以“Mozilla Firefox”结尾)。
不幸的是,没有简单的方法可以指定窗口的哪个部分获得焦点。如果您想将SendKeys
设置为网址栏,但搜索栏在上次模糊之前是最后一次聚焦,则会将键发送到搜索栏。除非你模拟键盘导航(类似于Ctrl + F来集中查找页面,然后选项卡四次以集中URL地址栏),否则没有办法。它可能会有点混乱。除了说明以外,还有一个示例Batch + Jscript混合脚本(保存为.bat扩展名),演示AppActivate
和SendKeys
方法。请参阅SendKeys
TechNet article了解符号及其含义(如~
发送输入)。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
if "%~2"=="" (
echo usage: %~nx0 "window title" "keys to send"
echo See https://technet.microsoft.com/en-us/library/ee156592.aspx
goto :EOF
)
cscript /nologo /e:Jscript "%~f0" "%~1" "%~2"
goto :EOF
@end // end batch/begin JScript chimera
var osh = WSH.CreateObject('WScript.Shell'),
args = { title: WSH.Arguments(0), keys: WSH.Arguments(1) };
function type(what) {
var keys = what.split('{PAUSE}');
for (var i=0; i<keys.length;) {
osh.SendKeys(keys[i]);
if (++i < keys.length) WSH.Sleep(500);
}
}
osh.AppActivate(args.title);
type(args.keys);
使用这个脚本,如果你输入
scriptname.bat "Firefox" "^f{BS}{PAUSE}{TAB 4}{PAUSE}http://www.google.com~{PAUSE}^f{ESC}"
...你会专注火狐,发送按Ctrl +˚F打开或找到焦点在网页中,Backspace键删除任何现有的搜索字符串,选项卡到URL栏,导航到谷歌,然后关闭页面查找页脚栏。
请参阅?我告诉过你。乱。但可行。
有趣。因此,scriptname.bat代码与您输入的内容完全相同,因为我对Jscripts不熟悉。虽然可能会让我读一些好东西。 {pause}做了什么,它似乎只是命令之间的分隔符? – David
@David'type(str)'函数本质上会在遇到'{PAUSE}'(区分大小写)的地方插入半秒停顿。你熟悉JavaScript吗?如果是这样,那么JScript语法应该看起来很熟悉。如果我的回答有帮助,请考虑将其标记为已接受。 [见本页](http://meta.stackexchange.com/questions/5234/)解释为什么这很重要。 – rojo
不,我真的没有任何JavaScript经验,这就是为什么我说它不会伤害我读它,但它看起来非常类似于VB。我打算等到今晚我确认你的答案,然后我才接受它,但在阅读了你的链接之后,我陷入了困境。这当然是非常有用的,非常具有说服力。太感谢了! – David
使用SendKeys函数的vbscript将是非常好的。 – SomethingDark
@SomethingDark你能详细说明一下吗?像创建一个VBScript并从批处理文件中调用它? – David