是否有批代码更改为另一个特定 window 的命令?

Is there a command for batch codes to change to another specific window?

是否可以将命令放入批处理文件中,将文本输入指定的 window 并按下回车键,就好像用户正在与之交互一样?

我知道一个名为 "keystuff" 的方便的命令提示符小 exe,它能够更改 windows 和插入文本,但我找不到它在哪里可以指定哪个 window 更改为,因为它只是利用 Alt+Tab 更改 window.

你可以,有点——但不完全可靠,而且不是纯 Batch。您可以将 Wscript.Shell COM object 用于其 AppActivate and SendKeys 方法。 AppActivate 将允许您通过其 PID 或标题将焦点更改为另一个 window。当通过 window 标题聚焦时,首先尝试匹配完整标题,然后是标题开头,然后是标题结尾,顺序是这样。因此,例如,如果您想将击键发送到 Firefox,您可以 shellObj.AppActivate('Firefox')(因为 Firefox 选项卡以 "Mozilla Firefox" 结尾)。

不幸的是,没有简单的方法来指定 window 的哪一部分获得焦点。如果您想 SendKeys 到 URL 栏,但搜索栏在 window 上次模糊之前最后一次聚焦,则键将发送到搜索栏。除非您模拟键盘导航(例如 Ctrl+F 以聚焦 Find-in-page,然后 Tab 四次以聚焦 URL 栏)。可能会有点乱。

抛开注意事项,这里有一个 Batch + Jscript 混合脚本示例(使用 .bat 扩展名保存)演示了 AppActivateSendKeys 方法。参见SendKeys TechNet article作弊sheet符号及其含义(如~发送输入)。

@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}"

...您将聚焦 Firefox,发送 Ctrl+F 打开或聚焦 find-in-page,Backspace 删除任何现有的搜索字符串,Tab 到 URL 栏,导航到 Google,然后关闭 find-in-page页脚栏。

看到了吗?我告诉你了。杂乱。但是可行。