2015-06-20 21 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

相關問題