昨天,我通過一番努力解答了以為一位網友的問題(詳細情況見這裡),不少網友看到後都給予了支援,也有部分網友将自己積壓多年的問題,拿出來詢問,一位有心的網友,看到我給出的示例代碼中用到了#usehook這個指令,疑惑不解特來詢問(問題和解答在這裡),回答之後略有感慨啊!看來大家對AutohotKey的疑問還是蠻多的,希望官網能意識到這個問題吧!今天寫這篇文章主要幫大家解惑兩個問題。希望對大家能有一些幫助!也希望志同道合的朋友一起來我這裡探讨學習。
NO1 使用鈎子和不使用鈎子有什麼差別?我怎麼感受不到呢?怎麼使用呢?
問題一股腦的都出來,咱們一個一個解答!
為什麼我感受不到使用鈎子和不使用鈎子的差別?
因為官網給出的例子太爛了!來看下:
;官方例子
#UseHook ; 強制從這裡往後的熱鍵使用鍵盤鈎子。
#x::MsgBox, This hotkey will be implemented with the hook.
#y::MsgBox, And this one too.
#UseHook off ;這裡之後鈎子取消
#z::MsgBox, But not this one.
其實,在很多時候我們是感受不到鈎子作用的,比如官方這個例子Win+x、Win+y、Win+z,如果不使用消息框給提示,我們根本不知道還有用了鈎子的!那麼這個例子就有點牽強附會,不知是以了。
官方的幫助中有這麼一句話,預設情況下, 使用 鍵盤鈎子 的熱鍵不會被 Send 指令的方法觸發,我覺着這才是重點,于是乎我就想到一個例子:
也是一位網友的需求吧!F1本身是幫助的快捷鍵,但是他想使用F1發送一段自己寫的代碼,shift+F1發送F1本身的功能。他寫了這麼一段代碼:
F1::
; his code...
msgBox, Code!
return
+F1::Send, {F1}
這時候問題來了,現在按下F1或者按下shift+F1都是消息框Code!這時候就困住了這位兄弟,他跑來問題什麼情況?哈哈 答案上邊就給出了!這時候就用到鈎子了!
我給他的代碼添加了一行代碼完美解決!
#UseHook, On
F1::
; his code...
msgBox, Code!
return
+F1::Send, {F1}
說到這裡,我們有必要白話說一下,鈎子是幹嘛的!其實這個名字非常形象了,下面給配張圖看的更清楚!

上邊這個圖的意思就是,比如上邊是一條河,溝子就是在旁邊挖個溝,讓水先流我這來,我可以把幹淨水喝了,不太幹淨洗洗腳,再加點什麼工業污水、生活污水,再還給河道。哈哈就這麼個意思吧!這就是溝子!
autohotkey中,send對你這旁邊的溝子不承認而已!是以上邊的問題就可以這麼解決。也是使用鈎子的一個差別吧,在上邊你的代碼區,你可以任意讓系統執行你寫的代碼了!關于使用不使用鈎子就說這些吧!鈎子、溝子哪個都夠形象的。
NO2 #usehook/#InstallKeybdHook,這兩個都是啟用鈎子,什麼差別?
其實這兩個指令都是安裝鈎子的意思,讓我們有點丈二和尚摸不着頭腦。哈哈 autohotkey就是這麼靈活!
其實這兩指令的使用起來沒有什麼差別!是以也不舉例子了!
差別在記憶體使用上!
換句話說,#InstallKeybdHook這個指令,傻瓜一點,用不用我先把溝刨出來,先把記憶體占上,#usehook這個指令呢,就聰明一點,腳本中有熱鍵我才刨溝,沒有我就不用搞記憶體了。
這兩個指令具體怎麼用看個人了! 遊戲外挂、幹些什麼壞事都離不開鈎子,這裡就不詳細講了。如果大家有興趣可以自行 研究一下。
今天文章先到這裡吧!也許你有更好的建議,歡迎與我交流!本文更新位址在這裡!