是否可以將命令放入批處理文件中,該文件將文本輸入到指定的窗口中,並按下回車鍵,就好像用戶正在與之交互一樣?是否有批量代碼更改爲另一個特定窗口的命令?
我知道一個叫做「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