前幾篇文章講的都是 AHK 的語(yǔ)法,比較枯燥,這篇文章的內(nèi)容更實(shí)用一些。很多情況我們使用 AHK,并不是為了寫一個(gè)功能完備軟件,而是寫一個(gè)簡(jiǎn)單的腳本來和其他軟件交互,這就涉及到如何在 AHK 中運(yùn)行其他軟件。本文重點(diǎn)講 Run 命令的基本用法,其他高級(jí)內(nèi)容之后的文章會(huì)依次提及。
啟動(dòng)軟件
使用 AHK 的經(jīng)典場(chǎng)景,就是用一個(gè)熱鍵啟動(dòng)一個(gè)軟件,比如用 Win + n 啟動(dòng)記事本:
#n::
Run, notepad
return
這里就不詳細(xì)講綁定熱鍵的語(yǔ)法了,因?yàn)橄嚓P(guān)資料特別多,而且我以后會(huì)單獨(dú)介紹熱鍵相關(guān)的內(nèi)容。重點(diǎn)看 Run, notepad,這條語(yǔ)句就是啟動(dòng)記事本,因?yàn)橛浭卤拒浖奈募?notepad.exe,是不是非常簡(jiǎn)單。但 Run 命令也并非簡(jiǎn)單到只支持一個(gè)參數(shù),它的用法如下:
Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
Target 可以是可執(zhí)行文件的文件名,如上邊的 notepad,可以加參數(shù),也可以是一些其他東西,后文會(huì)具體講到。WorkingDir 用來指定工作目錄,比如我想在 C 盤根目錄運(yùn)行記事本并打開 test.txt,就可以這樣:
Run, notepad test.txt, C:\
第三個(gè)參數(shù) Max|Min|Hide|UseErrorLevel 是選項(xiàng),可以讓運(yùn)行的軟件最大化(Max),最小化(Min),隱藏(Hide),UseErrorLevel 用于獲取進(jìn)程退出的返回碼,暫時(shí)用不到,以后再講。
第四個(gè)參數(shù) OutputVarPID 用來獲取進(jìn)程的 PID,暫時(shí)也用不到。
需要注意的一點(diǎn),用 Run 啟動(dòng)其他軟件后,AHK 代碼會(huì)繼續(xù)執(zhí)行,而不會(huì)等軟件退出。如果需要等軟件退出再繼續(xù)運(yùn)行,需要用 RunWait 命令,這個(gè)后續(xù)我也會(huì)提到。
打開網(wǎng)址
Run 后邊除了加可執(zhí)行文件,還可以直接加網(wǎng)址,這樣就不要到處找瀏覽器的安裝位置了。
; 網(wǎng)址前邊需要加 http:// 或 https://,以便讓 AHK 知道這是一個(gè)網(wǎng)址
Run, https://autohotkey.com
; 如果網(wǎng)址是以 www. 開頭的,也可以省略 http:// 或 https://
Run, www.autohotkey.com
; 錯(cuò)誤用法,AHK 會(huì)嘗試在本地找 autohotkey.com 文件,如果找不到就會(huì)報(bào)錯(cuò)
Run, autohotkey.com
其他用法
除了啟動(dòng)進(jìn)程和打開網(wǎng)址,Run 還有一些其他用法。
打開文件。當(dāng) Run 后邊直接接非可執(zhí)行文件時(shí),效果也是打開文件。打開文件所使用的軟件,是在資源管理器關(guān)聯(lián)的默認(rèn)軟件,可以在資源管理器中選定文件,右鍵菜單->屬性 里更改打開方式。
Run, open C:\test.txt
; open 可以省略
Run, C:\test.txt
編輯文件。效果同在資源管理器選定文件,右鍵菜單->編輯,通常是用記事本打開。如果右鍵菜單里沒有“編輯”菜單項(xiàng),會(huì)報(bào)錯(cuò)。
Run, edit C:\test.txt
用資源管理器打開文件夾,需要加文件夾的路徑。
Run, explore C:\
查看文件屬性,效果同在資源管理器選定文件,右鍵菜單->屬性。
Run, properties C:\test.txt
用資源管理器打開文件夾,并進(jìn)入搜索模式,以便查找文件。
Run, find C:\
打印文件,效果同在資源管理器選定文件,右鍵菜單->打印,如果無(wú)“打印”菜單項(xiàng),會(huì)報(bào)錯(cuò)。
Run, print C:\test.txt
用資源管理器打開 CLSID 文件夾,CLSID 文件夾是由系統(tǒng)定義的一批特殊文件夾,名字是一串“神秘?cái)?shù)字”。
; 打開我的文檔文件夾
Run, ::{450d8fba-ad25-11d0-98a8-0800361b1103}
常用 CLSID 文件夾列表:
| CLSID | 名稱 |
|---|---|
| ::{20d04fe0-3aea-1069-a2d8-08002b30309d} | 我的電腦 |
| ::{450d8fba-ad25-11d0-98a8-0800361b1103} | 我的文檔 |
| ::{645ff040-5081-101b-9f08-00aa002f954e} | 回收站 |
| ::{208d2c60-3aea-1069-a2d7-08002b30309d} | 網(wǎng)上鄰居 |
| ::{7007acc7-3202-11d1-aad2-00805fc1270e} | 網(wǎng)絡(luò)連接 |
| ::{2227a280-3aea-1069-a2de-08002b30309d} | 打印機(jī)和傳真 |
關(guān)于空格和引號(hào)
如果文件名、路徑名或者參數(shù)中包含空格,是需要特別注意的。
Run 后邊加的文件路徑是可以包含空格的,比如:
Run, c:\Program Files\Oracle\VirtualBox\VirtualBox.exe
Program Files 里包含一個(gè)空格,但 Run 不會(huì)將 c:\Program 視為文件名,將 Files\Oracle\VirtualBox\VirtualBox.exe 視為參數(shù)。但如果之后再加參數(shù)就要小心了,謹(jǐn)慎起見,需要對(duì)每一個(gè)參數(shù)單獨(dú)加上雙引號(hào)。
雖然在某些情況不加也可以工作,比如這樣:
Run, notepad aa bb.txt
會(huì)用記事本打開一個(gè)名為 aa bb.txt 的文件。
但也可能出問題,比如這樣:
Run, c:\mine\app\AutoHotkey\AutoHotkey.exe aa bb.ahk
AutoHotkey.exe 提示 aa 文件不存在,而實(shí)際我想運(yùn)行的文件為 aa bb.ahk。同樣的語(yǔ)法,效果卻不同,區(qū)別在于要運(yùn)行的軟件是如何解析參數(shù)的。
如果在參數(shù)兩邊加上引號(hào),就沒有這樣的問題了:
Run, notepad "aa bb.txt"
Run, c:\mine\app\AutoHotkey\AutoHotkey.exe "aa bb.ahk"
; 后邊可以再加參數(shù),但包含空格的參數(shù)都要有引號(hào)。
Run, c:\mine\app\AutoHotkey\AutoHotkey.exe "aa bb.ahk" "arg 1" "arg 2"
等待軟件退出再繼續(xù)運(yùn)行
用 Run 命令啟動(dòng)軟件的話,AHK 并不會(huì)等軟件退出后才繼續(xù)運(yùn)行,在運(yùn)行圖形界面軟件時(shí),這也是我們通常的做法。如果我們需要讓 AHK 暫停,直到運(yùn)行起來的軟件退出才繼續(xù),可以用 RunWait 命令取代 Run,除了這個(gè)區(qū)別,用法上和 Run 是一致的。
其他內(nèi)容
除了將軟件運(yùn)行起來,很多時(shí)候我們也有一些其他需求。比如獲取軟件的輸出(通常是命令行軟件的輸出,如 ipconfig),獲取軟件的退出碼,獲取軟件進(jìn)程的 PID 等等,我會(huì)在后續(xù)文章中詳細(xì)講到。
付費(fèi)解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領(lǐng)域相關(guān)問題,靈活定價(jià),歡迎咨詢,微信 ly50247。