2015-06-20 22 views
0

是否可以将命令放入批处理文件中,该文件将文本输入到指定的窗口中,并按下回车键,就好像用户正在与之交互一样?是否有批量代码更改为另一个特定窗口的命令?

我知道一个叫做“keystuff”的方便的小exe文件,它能够改变窗口并插入文本,但我无法找到它能够指定哪个窗口改变的地方,因为它只是使用Alt +选项卡来更改窗口。

+0

使用SendKeys函数的vbscript将是非常好的。 – SomethingDark

+0

@SomethingDark你能详细说明一下吗?像创建一个VBScript并从批处理文件中调用它? – David

回答

1

你可以,但不完全可靠,而不是纯粹的批次。您可以使用Wscript.Shell COM对象的AppActivateSendKeys方法。 AppActivate可让您通过其PID或其标题将焦点更改为另一个窗口。当通过窗口标题进行对焦时,首先按照完整标题,标题开始,然后是标题结束按顺序进行比赛。因此,例如,如果您想向Firefox发送按键,则只需shellObj.AppActivate('Firefox')(因为Firefox标签以“Mozilla Firefox”结尾)。

不幸的是,没有简单的方法可以指定窗口的哪个部分获得焦点。如果您想将SendKeys设置为网址栏,但搜索栏在上次模糊之前是最后一次聚焦,则会将键发送到搜索栏。除非你模拟键盘导航(类似于Ctrl + F来集中查找页面,然后选项卡四次以集中URL地址栏),否则没有办法。它可能会有点混乱。除了说明以外,还有一个示例Batch + Jscript混合脚本(保存为.bat扩展名),演示AppActivateSendKeys方法。请参阅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栏,导航到谷歌,然后关闭页面查找页脚栏。

请参阅?我告诉过你。乱。但可行。

+0

有趣。因此,scriptname.bat代码与您输入的内容完全相同,因为我对Jscripts不熟悉。虽然可能会让我读一些好东西。 {pause}做了什么,它似乎只是命令之间的分隔符? – David

+0

@David'type(str)'函数本质上会在遇到'{PAUSE}'(区分大小写)的地方插入半秒停顿。你熟悉JavaScript吗?如果是这样,那么JScript语法应该看起来很熟悉。如果我的回答有帮助,请考虑将其标记为已接受。 [见本页](http://meta.stackexchange.com/questions/5234/)解释为什么这很重要。 – rojo

+0

不,我真的没有任何JavaScript经验,这就是为什么我说它不会伤害我读它,但它看起来非常类似于VB。我打算等到今晚我确认你的答案,然后我才接受它,但在阅读了你的链接之后,我陷入了困境。这当然是非常有用的,非常具有说服力。太感谢了! – David

相关问题