導(dǎo)言:很多人可能在生活中或電視上看到這樣的情景:一個(gè)昆蟲(chóng)向前飛搂橙,撞到了蜘蛛網(wǎng)京革,開(kāi)始掙扎端幼,每一次的掙扎都讓蛛網(wǎng)劇烈晃動(dòng)泥栖,看起來(lái)?yè)u搖欲破簇宽,但昆蟲(chóng)也讓蛛絲越捆越緊,最終成為蜘蛛腹中之物(偶爾也有網(wǎng)破之時(shí))吧享。這整個(gè)網(wǎng)就像是知識(shí)體系魏割,昆蟲(chóng)的落點(diǎn)則是所遇到問(wèn)題與我們知識(shí)體系的連接處,當(dāng)知識(shí)體系中節(jié)點(diǎn)越多钢颂,連接越緊密钞它,那么遇到問(wèn)題被解決的可能性也越大(撞到網(wǎng)上的機(jī)率大多了)。曾看到一個(gè) Total Commader 問(wèn)題殊鞭,我在回答中使用了消息遭垛,后來(lái)題主追問(wèn),為什么會(huì)想到消息呢操灿?希望本文能給有類(lèi)似疑問(wèn)的朋友一些啟發(fā)锯仪,這里講述學(xué)習(xí)和使用 AutoHotkey 過(guò)程中如何構(gòu)建知識(shí)體系中的個(gè)人看法,歡迎交流牲尺。
掌握基礎(chǔ)部分
- 熱鍵卵酪、熱字串
這兩個(gè)是最基礎(chǔ)的,基本無(wú)需學(xué)習(xí)谤碳、即刻掌握。 - 基本語(yǔ)法
腳本的基本知識(shí)(如注釋?zhuān)┮缍埂⒆兞亢捅磉_(dá)式的用法蜒简,這部分也無(wú)需專(zhuān)門(mén)學(xué)習(xí),簡(jiǎn)單了解即可漩仙。 - 普通的命令搓茬、函數(shù)
這里應(yīng)著重于命令自身的用途犹赖、語(yǔ)法和參數(shù)等,需要能用于實(shí)際問(wèn)題中卷仑。 - 把同類(lèi)命令(函數(shù))聯(lián)系起來(lái)
分類(lèi)命令峻村,加強(qiáng)彼此之間的區(qū)別與聯(lián)系,如文件操作命令锡凝、字符串操作命令等(幫助的目錄中已經(jīng)分類(lèi)好了)粘昨,又如 Send 系列命令中哪個(gè)適用于哪種環(huán)境。 - 流程控制窜锯、子程序张肾、函數(shù)
在需要時(shí)重用代碼,增加編寫(xiě)代碼和解決問(wèn)題的效率锚扎。
學(xué)習(xí)擴(kuò)展內(nèi)容
- 指令
能使用指令實(shí)現(xiàn)自己需要的控制吞瞪。 - 數(shù)組、對(duì)象
能理解驾孔,并對(duì)比文件對(duì)象與之前的文件命令芍秆、偽數(shù)組與數(shù)組的異同。 - 圖形界面
了解 Gui/GuiControl/GuiControlGet 及個(gè)子命令用法翠勉,會(huì)使用 SmartGUI 創(chuàng)建圖形界面或自行定制妖啥。 - 正則表達(dá)式
文本處理中,這個(gè)工具功能強(qiáng)大眉菱,要完全掌握委實(shí)不易迹栓,不過(guò)基礎(chǔ)部分通過(guò)幫助中的參考在腳本中使用問(wèn)題應(yīng)該不大。
了解進(jìn)階知識(shí)
- Run/RunWait
不會(huì)批處理不要緊俭缓,適當(dāng)了解系統(tǒng)命令行中的命令有些事情能事半功倍克伊,有興趣也可了解第三方工具,如 NirCmd(命令行中少見(jiàn)的瑞士軍刀)等华坦。注:這兩個(gè)命令運(yùn)行圖形程序也是一樣的愿吹,不過(guò)這對(duì)于系統(tǒng)程序或第三方工具都較簡(jiǎn)單,應(yīng)該基礎(chǔ)部分就會(huì)了惜姐。 - COM 系列函數(shù)
會(huì)使用系統(tǒng)或第三方 COM 對(duì)象犁跪,如 Office 系列組件、大漠插件等歹袁。 - PostMessage/SendMessage/OnMessage()/RegisterCallback()
消息坷衍,會(huì)查詢(xún)系統(tǒng)或第三方工具的消息相關(guān)文檔并用于腳本中。 - WMI
WMI 實(shí)際上也是通過(guò) COM 調(diào)用的条舔,但它異常強(qiáng)大同時(shí)異常復(fù)雜枫耳,所以這里單獨(dú)提到。 - DllCall()/VarSetCapacity()/NumPut()/NumGet()
了解 Windows API孟抗,能構(gòu)造出所需變量類(lèi)型并使用迁杨,能使用第三方組件钻心。 - 其他
AutoHotkey_H、機(jī)器碼等铅协,單從用處而言這些可能較罕見(jiàn)捷沸,不過(guò)有助于理解 AutoHotkey 的內(nèi)部機(jī)制,如半線程的概念等狐史。
小結(jié)
- 上面這些的學(xué)習(xí)材料痒给,除了幫助一般都可以在論壇中找到說(shuō)明或相關(guān)指引(對(duì)于第三方工具還需查閱相關(guān)文檔),基本都帶有測(cè)試代碼预皇,自己動(dòng)手實(shí)踐過(guò)侈玄,要掌握問(wèn)題不大。
- 說(shuō)到學(xué)習(xí)資源吟温,許多用戶(hù)覺(jué)得 AutoHotkey 的資源不多(基本都在論壇)序仙。我覺(jué)得,基礎(chǔ)或擴(kuò)展部分的內(nèi)容在幫助或論壇的資源作為學(xué)習(xí)是足夠的鲁豪,對(duì)于進(jìn)階部分除了查閱相關(guān)文檔潘悼,很多時(shí)候還可以參照其他語(yǔ)言的例子,例如 vbs 調(diào)用 COM 的代碼可以直接調(diào)用或轉(zhuǎn)換過(guò)來(lái)(以前微軟網(wǎng)站上有大量 vbs 代碼的教程)爬橡,而操作網(wǎng)頁(yè) JavaScript 的代碼說(shuō)少就說(shuō)不過(guò)去了(它們調(diào)用 COM治唤、WMI 的語(yǔ)法都大同小異),有相應(yīng)的功力也可參考其他語(yǔ)言的教程糙申。
- 學(xué)習(xí)這些不需按指定順序宾添,按個(gè)人的需求,假設(shè)你之前操作過(guò)了字符串柜裸,最近又遇到字符串問(wèn)題缕陕,對(duì)某些命令的用法感到疑惑,那么可以把所有的字符串命令(函數(shù))都看過(guò)疙挺,對(duì)不解的地方寫(xiě)個(gè)小腳本測(cè)試扛邑,這樣對(duì)它們有個(gè)整體的理解和把握,那么以后遇到字符串問(wèn)題時(shí)一般能很快找到最適用的命令铐然。
- 構(gòu)建了這個(gè)體系后蔬崩,同一種問(wèn)題常常有多種解決方法,例如使用命令行命令搀暑、COM沥阳、WMI 等,怎么選擇呢自点?實(shí)際上無(wú)需選擇沪袭,如果效果相同,選最簡(jiǎn)單樟氢、最順手的就行了冈绊。另外還有個(gè)指導(dǎo),一般無(wú)需選最強(qiáng)大的埠啃、夠用就行了死宣,說(shuō)到這點(diǎn)估計(jì) Windows API 的強(qiáng)大無(wú)其他方式可比,不過(guò)估計(jì)沒(méi)幾個(gè)人作為首選碴开。
最后毅该,這個(gè)網(wǎng)的結(jié)點(diǎn)越多,聯(lián)系越緊密潦牛,那么獵物撞到網(wǎng)上的機(jī)率就越大(解決的方法也增多)眶掌。對(duì)于本文開(kāi)頭所說(shuō)的問(wèn)題,如果不用消息巴碗,可能還有其他方法朴爬,因?yàn)檫@個(gè)方法夠簡(jiǎn)單,我不會(huì)再作他想橡淆。