小鳥學AHK(1)之運行程序或打開文檔
AHK就是AutoHotKey,是一款免費的、Windows平台下開放源代碼的熱鍵腳本語言。
親愛的朋友,叫我怎么向你推薦它呢!
COOL,對,就是酷,那么多干巴巴的介紹我不想COPY,如果你掌握了它,哪怕只是會一點點,也足夠你炫耀了.比你身邊所謂的電腦高手還要風光.這個理由夠了吧?
那么AHK能做什么呢?對不起,我說不清楚,因為我也是小鳥,你正在看的垃圾本來就是本小鳥的學習筆記而已.但我可以肯定的一點是,你這個人能做的事它都能做,你所有在電腦里的行為除了人類主觀的部分它都可以替你完成得更快更好.而這也只是它初級的部分.更厲害的是它可以做程序,甚至可以做病毒(聽說的)
慢着別走,我知道你不想學編程,我也不想,AHK絕對不會拒絕你我這樣的懶人的.它其實非常簡單,非常容易非常的...cool!
只要你有一點點分析問題的邏輯推理能力就能上手.當然,要達到高級的境界還是應該有一些編程基礎的.寫批處理的能力就完全夠了.
我一向認為男人至少要擅長一項運動,一種樂器,一種編程....和拿手的幾個小炒.什么?你不是男人?OK,把照片和電話發給我.其實我也不合格因為我還不會什么樂器,扯遠了.總之你不會后悔的.知道那些會做圖做網頁甚至會給別人下木馬的駭客們有什么感覺么,對,很爽的一種控制與創造的感覺,一個男人如果沒有體會到這種感覺,多遺憾!
先說這么多,先介紹一些AHK的基礎知識,用過熱鍵啟動程序的軟件么?我們今天來實現它.
AutoHotKey(安裝版下載|綠色版,下文都簡稱為 AHK)。第一次下載 AHK 的朋友建議下載安裝版,以后升級的話,下載綠色版,然后覆蓋到 AHK 的安裝目錄。下載安裝版的好處是:系統會自動關聯 .ahk 文件。
在AHK目錄里建立AutoHotKey.ini文件,用記事本打開輸入代碼,然后運行AHK程序就可以實現這些代碼的功能.
1運行程序或打開文檔
Run(運行)命令用來運行或打開程序、文檔、網址(URL)或快捷方式,例如:
Run, Notepad
Run, C:\My Documents\Address List.doc
Run, www.yahoo.com
Run, C:\My Documents\My Shortcut.lnk
Run, mailto:someone@anywhere.com
上面例子中的命令都可以指配給含有 熱鍵標識(hotkey label) 的熱鍵。在下面的第一個例子里,被指配的熱鍵是Win+N,而第二個是Control+Alt+C:
#n::Run, Notepad
^!c::Run, calc.exe
上面的例子都屬於單行熱鍵,因為它們都只是由一個命令組成。如果需要熱鍵執行更多的命令,就要把第一行命令放到熱鍵定義式的下面,並且使最后一行為 return(返回)。例如:
#n::
Run, http://www.google.com
Run, Notepad.exe
return
上面的Notepad.exe(記事本)、calc.exe(計算器)等都是系統程序,如果要運行非系統程序則需要指定它的完整路徑:
Run, %ProgramFiles%\Winamp\Winamp.exe
在上面的例子中,%ProgramFiles% 是操作系統支持的 環境變量(environment variable)。之所以使用它而不是用像C:\Program Files這樣的路徑,那是因為這樣可使得腳本有更好的可移植性,就算別的電腦的系統不是在C盤也可以正確執行命令。
如果希望腳本在程序或文檔關閉后才繼續執行下一步,那么就需要使用 RunWait(運行等待) 命令來代替Run命令。例如在下面的這個例子中,MsgBox(對話框)命令部分將不被執行,直到用戶關閉了記事本之后才繼續:
RunWait, Notepad
MsgBox, 任務完成(記事本已被關閉);彈出對話框提示任務完成.
;后的文字是注釋,對程序沒有任務影響.
小貼士 - Ctrl、Alt、Shift 在 AHK 怎么表示?
WIN的符號是 #
Ctrl 的符號是 ^
Alt 的符號是 !
Shift 的符號是 +
如果你想按下"Ctrl + Alt + Shift + Win + Q"(這個快捷鍵真牛×。- -b)來啟動 QQ 的話,可以這樣寫:
^!+#q::run D:\qq\qq.exe
快增加自己的快捷鍵吧,保存 AutoHotKey.ini 后,右擊系統托盤那個 H 圖標,選擇"reload this script"重啟 AHK,要注意,每次修改腳本后都要重啟腳本。(除介紹部分主要來自AHK幫助文件)
小鳥學AHK(2)之發送鍵擊或點擊動作
2008-06-27 23:47
關於按鍵精靈,我認為它很一般,雖然國內的支持率很高,使用者很多,有點地頭蛇壟斷的感覺.對於小鳥來說,按鍵精靈太弱了,要實現稍微復雜一點的功能就要借用讓人頭疼而且為數不多的C語言插件函數,那我還不如直接編程算了.如果AHK也支持CS-script,那按鍵精靈就完敗了.據說AHK很快就支持了.
當然對於我們小鳥來說,先不考慮這些也不用什么語言,AHK常用的命令就非常強大能做很多事,可以這么說,AHK的初級用戶就相當於按鍵精靈的高級用戶了.
就內存占用來說,按鍵精靈也太大了,不適合做系統常駐程序,而AHK一般只有1到2M.
我以前用按鍵精靈做過一些簡單的事,比如在魔獸世界里練習附魔什么的,完全就是靠鼠標找點不停地來回點擊,faint.現在已經完全放棄它.不過如果你有使用按鍵精靈的基礎,相信會更容易理解和上手AHK的.
閑話到此,今天我們的課程是發送鍵擊或點擊動作
使用 Send(發送)命令來發送鍵擊動作到激活窗口(指最前面的窗口)。在下面的這個例子里,Win+S 變成鍵入簽名的熱鍵。按下軟件前必須確認窗口(例如編輯器或電子郵件草稿窗口)處於激活狀態:
#s::
Send, Sincerely,{enter}John Smith
return
在上面的例子中,除了{enter}意外所有的字符都被逐字發送,因為{enter}模擬了回車鍵。下面的將舉例說明一些其它常用的特殊字符:
Send, ^c!{tab}pasted:^v
上面的例子將會發送Control+C(復制),然后是Alt+Tab(切換窗口),最后是發送字串"pasted:"並接上一個Control+V(粘貼)。
鼠標點擊: 對某個窗口發送點擊動作需要測定點擊位置的X軸和Y軸坐標。這可借助AutoHotkey附帶的AutoScriptWriter或者Window Spy來實現。下面就是應用Window Spy的方法:
運行Window Spy(從開始菜單或者在AutoHotkey的托盤圖標上點擊右鍵出現的菜單中可找到它);
通過點擊目標窗口的標題欄、使用Alt+Tab進行切換或者其他方法來激活窗口(Window Spy將一直是最上層窗口);
移動鼠標到目標窗口上需要進行點擊的位置,記下此時Window Spy中顯示的坐標值(或者按Shift-Alt-Tab來切換到Window Spy的窗口,它顯示的坐標值將停止變化,因此可以方便用戶復制和粘貼坐標值)
在 MouseClick(鼠標點擊) 命令中使用上面獲得的坐標值,例如:
MouseClick, left, 112, 223
如果只需要移動鼠標而不用點擊的話,請使用 MouseMove(鼠標移動)命令。要拖動鼠標,請使用 MouseClickDrag(鼠標拖動)命令。
我現在用的一個登錄代碼
::/d::
Send, wildtoy {Tab} 123456 {Enter}
return
;你在百度登錄框里只要輸入/d,它就會把輸入wildtoy,切換到密碼輸入框輸入123456,最后回車,為什么要用/號呢,無論你用什么都行,你就是::aa::也可以,問題是你不想打字打到aa的時候突然變成自己的用戶名和密碼吧
::/mail::zhengwang79@gmail.com
;經常要輸入電郵地址,電郵太長怎么辦,像這樣以后只要輸入/mail回車或空格,就會變成電郵了.
下面附上常用的一些按鍵列表
鼠標(Windows NT/2000/XP或更高級版本)
LButton - 鼠標左鍵
RButton - 鼠標右鍵
MButton - 鼠標中鍵或滾輪
WheelDown - 鼠標滾輪向下滾動(向着身體的方向)
WheelUp - 鼠標滾輪向上滾動
以下定義僅支持Windows 2000/XP及更高級版本:
XButton1 - 只有某些鼠標才會有這個按鍵
XButton2 - 只有某些鼠標才會有這個按鍵
鍵盤
注意:單個字母鍵和數字鍵的名字就是它上面的符號,因此下面將不列出來,例如 b 就是代表 "b"鍵,而 5 就是"5"鍵
Space - 空格鍵
Tab
Enter (或 Return)
Escape (或 Esc)
Backspace (或 BS) - 退格鍵
Delete (或Del)
Insert (或 Ins)
Home
End
PgUp
PgDn
Up
Down
Left
Right
ScrollLock
CapsLock
NumLock
NumpadDiv - (小鍵盤上的)除號鍵/斜杠
NumpadMult - (小鍵盤上的)乘號鍵/星號
NumpadAdd - (小鍵盤上的)加號鍵
NumpadSub - (小鍵盤上的)減號鍵
NumpadEnter - (小鍵盤上的)回車鍵
當Numlock的狀態是關閉時:
NumpadDel
NumpadIns
NumpadClear - 在大多數鍵盤上就是指Numpad5這個按鍵
NumpadUp
NumpadDown
NumpadLeft
NumpadRight
NumpadHome
NumpadEnd
NumpadPgUp
NumpadPgDn
當Numlock的狀態是打開時:
Numpad0
Numpad1
Numpad2
Numpad3
Numpad4
Numpad5
Numpad6
Numpad7
Numpad8
Numpad9
NumpadDot - 小數點(句點)
從 F1 到 F24 - 大多數鍵盤上面的那一排功能鍵
AppsKey - 用來調用右鍵菜單的按鍵
LWin - 左邊的Win鍵(徽標鍵)
RWin - 右邊的Win鍵(徽標鍵)
Control (或 Ctrl)
Alt
Shift
注意: 在大多數情況下,下面這六個按鍵是不支持用在 Windows 95/98/Me系統上的,請使用上面列出的按鍵代替:
LControl (或 LCtrl) - 左邊的control鍵
RControl (或RCtrl) - 右邊的control鍵
LShift
RShift
LAlt - 左邊的Alt鍵
RAlt - 注意:如果您的鍵盤布局是用了AltGr鍵而不是RAlt(即沒有右邊的Alt鍵),您可能就要通過 <^>! 這樣的格式來令它變成熱鍵前綴,詳細說明請看 這里。此外,, "LControl & RAlt::" 將使得AltGr鍵本身變成熱鍵。
PrintScreen
CtrlBreak
Pause
Break
小鳥學AHK(3)之創建腳本
2008-07-03 18:25
這幾天補數據和找工作。主要還是因為看到了別的AHK愛好者的博客,受打擊了。看來我還真的是鳥中鳥啊。到底繼續不繼續下去呢,反正也沒人瞅,算是意志的鍛煉吧
今天我們講創建腳本
有人問了,裝了軟件學了前兩課的代碼了,往哪寫啊,怎么實現功能啊,
別急有三種方式:
1.建個記事本文件,改擴展名為ahk,比如test.ahk ,用記事本軟件打開編輯就行了。雙擊這個文件就可以運行,不過每運行一個腳本都會在托盤中多出一個圖標。
2.把test.ahk編譯成exe文件,這樣你就可以發給朋友了,打開 AHK 所在文件夾下的 Compiler 文件夾,雙擊里面的 Ahk2Exe.exe。然后依次瀏覽文件:要編譯的 AHK 文件,編譯后的 exe 文件名,編譯后的 exe 要顯示的圖標。其他一般不用輸入。如下圖(呵呵沒圖,誰想看圖說聲我發上來)選擇好后,點擊 convert。
3.打開 AHK 所在的文件夾,新建一個文本文件:AutoHotKey.ini。用記事本編輯,你可以把你所有的腳本都寫在里面。
總結:1和2會在右下角出現很多圖標,暈哦哪個是哪個啊。3是很整潔了就一個文件實現所有功能,但若是代碼很長很長那編輯起來也會很麻煩很麻煩。。。咋辦吶?
#Include 用這個,意思是載入文件,作用相當於把那個文件內容復制到當前位置
比如我的AutoHotKey.ini里面的內容是
#Include pm.ahk ; 同目錄下鬧鍾代碼
#Include myahk/tc.ahk ; 同目錄下的myahk目錄下的total commander軟件有關的代碼
#Include C:/game.ahk ;C盤根目錄下的游戲中用的代碼,
這樣是不是整潔多了,既保持了一個圖標,也方便了每個腳本的編輯與整理,當然我建議還是集中放到一個目錄下了
今天的課很簡單,但很重要哦
如果有比我還菜的鳥,一定要在下面通知我,讓我也高興一下
小鳥學AHK(4)之高級教程:熱鍵
2008-07-10 23:52
有朋友問了一些熱鍵和熱字符串的高級用法,本來我是想給如我一般的菜鳥一個入門的介紹,既然問到了,不回答面子過不去,可是俺也不會啊~~回頭惡補了一下,發現要寫成簡易的文字還真是難,因為原文已經非常簡易了。。。。只好原般照抄下來,關於熱鍵和熱字符串的簡單用法看(1)就可以了,想深入系統學習的有志高手看下面吧。原文來自yonken翻譯的AHK的幫助文檔。
下章發熱字符串,很想快點過去這段,給大家發些應用的小腳本。別着急啊
熱鍵,也就是快捷鍵,可以用來觸發某些指定的動作(例如運行一些程序或 宏指令(Macro))。下面這個例子中Win+N被設置為運行記事本的一個快捷鍵,井號[#]代表Win鍵(徽標鍵):
#n::
Run Notepad ;"開始→運行"中可運行的程序都可以使用,其他程序需要指定路徑
return
上面的最后一行的"return(返回)" 用以表示此熱鍵的結束。不過,如果此熱鍵只需要處理一行命令的話,那一行命令就可以放到雙冒號的右邊(不需要空格),換句話來說就是 return(返回) 可以省略了:
#n::Run Notepad
要使一個熱鍵有更多調節鍵,只需把它們連續列出即可。下面這個例子中 ^! 表示Control+Alt:
^!s::
MsgBox 您按了Ctrl+Alt+S.
return
值得注意的是,和其它常用的熱鍵一樣,它們是有一個先后順序的,例如上面的例子中,如果先按下S鍵然后才按Control和Alt將不能觸發熱鍵。舉個例子來說,我們用Ctrl+Alt+Del來調出Windows任務管理器,同樣也是有個順序的,您可以自己實踐一下,以下不再說明。
您可以使用下列調節鍵來定義熱鍵:
符號 相關描述
# Win (徽標鍵)
! Alt
^ Control
+ Shift
& &可用在兩個按鍵(包括鼠標按鍵)之間來組合它們成為一個自定義的熱鍵。詳細說明請看 下面。
< 使用成對按鍵(如Alt、Ctrl、Win)中左邊的一個。例如<!a 和 !a 差不多,但是<!a是只有當按下左邊的那個Alt時才會觸發熱鍵。此功能不支持Windows 95/98/ME。
> 使用成對按鍵(如Alt、Ctrl、Win)中右邊的一個。同上,此功能不支持 Windows 95/98/ME。
<^>! AltGr。如果您的鍵盤布局中AltGr鍵代替了右邊的Alt鍵,這一系列的符號就是用來表示AltGr鍵的(僅支持Windows NT/2k/XP或更高級版本)。例如:
<^>!m::MsgBox 您按了AltGr+m.
<^<!m::MsgBox 您按了左邊的Control+左邊的Alt+m.
* 通配符:只要包含有指定調節鍵的按鍵被按下即觸發熱鍵,經常用在 映射(Remap) 按鍵或按鈕的時候。例如:
*#c::Run Calc.exe ; Win+C, Shift+Win+C, Ctrl+Win+C等等,只要有Win+C即觸發熱鍵。
*ScrollLock::Run Notepad ; 按ScrollLock后運行記事本,不管是否同時有control/alt/shift/win按鍵按下。此功能不支持Windows 95/98/ME。
~ 如果自定義的熱鍵和系統/程序原有的熱鍵相同,則這些熱鍵同時觸發。在以下的兩個例子里,當用戶按下鼠標右鍵后,自定義的熱鍵功能和系統/程序原有的右鍵菜單將同時觸發:
~RButton::MsgBox 您按下了鼠標右鍵
~RButton & C::MsgBox 您按下了C鍵和鼠標右鍵
需要說明的是:在上面的例子中若沒有~(即RButton)則將屏蔽原有的右鍵菜單,另外,一些專門用來代替 alt-tab 的按鍵將總是忽略這一設置,此功能不支持Windows 95/98/ME。
$ 此符號只有當腳本使用 Send(發送) 命令發送的按鍵正好包含有熱鍵本身的時候才會用到。在不同的系統上使用$前綴運行起來會有一些變化:
在Windows NT4/2k/XP 或更高級版本:將強制使用 鍵盤鈎子(keyboard hook) 來執行熱鍵。它的副作用就是阻止了 Send(發送) 命令觸發熱鍵。使用$ 前綴與使用指定的 #UseHook 等效。
在Windows 95/98/Me 以及AutoHotkey v1.0.23以上: 在其 線程(thread) 的執行過程中熱鍵將失效,此后才重新生效。它的副作用是就算 #MaxThreadsPerHotkey 被設置為大於1也跟設置為1一樣。
UP UP通常寫在一個按鍵名后面,用來表示當某按鍵被松開后觸發熱鍵而不是在其被按下后。下面的例子把左邊的Win鍵映射(替換)成左邊的Control鍵:
*LWin::Send {LControl Down}
*LWin Up::Send {LControl Up} ; 這樣當左邊的Control鍵壞了的時候就可以用左邊的Win鍵來代替它。注意:並非完全替代,例如當按下LWin+Alt+Del的時候,並不會像按下Ctrl+Alt+Del一樣出現Windows任務管理器。
"Up" 還可以配合一些常用的熱鍵,例如: ^!r Up::MsgBox 您按下並松開了Ctrl+Alt+R.
此功能不支持 游戲操縱桿按鈕。同時還要求在v1.0.28版本以上以及 Windows NT4/2000/XP或更高級版本才能有效。
(查看 按鍵列表 獲得完整的鍵盤/鼠標/游戲操縱桿按鍵名列表)
可以把熱鍵標記當作是普通標記來使用:您可以使用 Gosub/Goto 命令轉到指定的標記,也可以定義多個熱鍵標記到相同的子程序,例如:
^Numpad0::
^Numpad1::
MsgBox 按下Control+Numpad0或Control+Numpad1都會顯示此信息。
return
如果一個熱鍵沒有定義任何動作,則這個按鍵或組合鍵將被屏蔽。下面的這個例子就屏蔽了右邊的Win鍵:
RWin::return
僅在Windows NT, 2K, XP及其上平台有效的功能:
您可以使用" & "連接兩個按鍵來自定義一個組合熱鍵。在下面的這個例子里,您可以按着小鍵盤上的0然后再按下1來觸發熱鍵:
Numpad0 & Numpad1::Run Notepad
Numpad0 & Numpad2::Run Calc
在上面的例子里,Numpad0 是個前綴按鍵。正如下面的這個例子一樣,前綴按鍵也可以設定其自己的動作,但只有當按鍵被松開的時候才被觸發,而且在按下按鍵的時候不會更改任何熱鍵:
Numpad0::WinMaximize A ; 最大化激活窗口。
滾動鼠標滾輪(向上滾動或向下滾動)可以被定義為熱鍵,例子:
MButton & WheelDown::MsgBox 您按着鼠標中鍵同時向下滾動了滾輪。
^!WheelUp::MsgBox 您按着Control+Alt同時向上滾動了鼠標滾輪。
還有一個功能是控制Numlock,Capslock,或Scrolllock這些鍵,使其保持開着或關閉的狀態。例如:SetNumlockState, AlwaysOn
Windows內置的熱鍵如Win-E(#e)和Win-R(#r)可通過在腳本中為它分配其他動作而達到屏蔽的目的。詳細說明請查看 撤銷或屏蔽熱鍵 部分。
取替 Alt-Tab: AltTab和ShiftAltTab是兩個比較特殊的命令,只跟熱鍵結合使用才會有用,它們是用來取替Alt-Tab和Alt-Shift-Tab的。例如, 在下面這個例子里,你可以使用左邊的Alt結合鼠標滾輪上下滾動來代替Alt-Tab和Alt-Shift-Tab進行切換。
LAlt & WheelDown::AltTab
LAlt & WheelUp::ShiftAltTab
類似地,只用鼠標也完全可以取替Alt-Tab,像下面一樣,按下中鍵將顯示切換界面,然后滾動鼠標滾輪即可進行切換,再次按下中鍵即可切換到選定窗口並退出切換界面:
MButton::AltTabMenu
WheelDown::AltTab
WheelUp::ShiftAltTab
如果您要用右手在鍵盤上切換(代替alt-tab),比較方便的方法是這樣:
RControl & RShift::AltTab ; 按住右邊的Ctrl鍵和Shift鍵來切換
RControl & Enter::ShiftAltTab ; 按住右邊的Ctrl鍵和回車鍵來切換()
The other Alt-tab actions available are:
1) AltTabAndMenu: 如果存在切換界面則向右切換,否則顯示切換界面。
2) AltTabMenuDismiss: 關閉切換界面。
現在您該知道以上所有關於Alt-tab的命令都必須像上面的例子一樣分配給熱鍵,否則它們將無效。
注意
由於Numlock鍵有開啟/關閉兩種狀態,使得每個小鍵盤上的按鍵可在不同狀態下觸發兩個不同的熱鍵。當然,也可以把它們設置為觸發同一個熱鍵而不管Numlock的狀態如何:
NumpadEnd::
Numpad1::
MsgBox, 熱鍵將忽略Numlock的狀態而觸發
return
如果(~)結合前綴按鍵使用過一次,則含有那個前綴按鍵的熱鍵都會向激活窗口發送前綴按鍵的動作。例如在下面的例子里,鼠標右鍵(RButton)就是前綴按鍵,上面的第一行命令規定了在按着鼠標右鍵的同時按下左鍵將觸發熱鍵而顯示對話框,而且由於~的存在,右鍵命令也同時觸發(例如顯示右鍵菜單,如果有的話);需要注意的是第二行的命令規定了在按着鼠標右鍵的同時往上滾動鼠標滾輪將觸發熱鍵而顯示對話框,而且由於沒有~,右鍵命令將被屏蔽(例如屏蔽右鍵菜單) ,然而當此腳本執行的時候,右鍵命令依然會觸發(例如不該出現的右鍵菜單出現了),因此需要特別注意這一點。
~RButton & LButton::MsgBox 您按着右鍵同時按下了左鍵。
RButton & WheelUp::MsgBox 您按着右鍵同時往上滾動了鼠標滾輪。
Suspend(中斷) 命令可以臨時關閉除了指定熱鍵以外的所有熱鍵。
在腳本運行的過程中,熱鍵可以通過 Hotkey(熱鍵) 命令動態地創建。Hotkey命令還可以修改、關閉或開啟腳本中已有的熱鍵。
游戲操縱桿熱鍵目前不支持像^ (Control)和# (Win)這樣的調節鍵前綴。不過,您可以使用 GetKeyState 來模擬它的效果,如下面這個例子:
Joy2::
GetKeyState, ControlState, Control
if ControlState <> D ;在這里D表示按鍵被按下
return ; 表明如果按鈕未被按下則沒有動作
MsgBox 您按着Control鍵同時按下了游戲操縱桿的第二個按鈕。
return
這個程序有點類似 多線程, 它允許在前一個熱鍵子程序仍在運行的時候運行新的熱鍵,例如上面有一個熱鍵被觸發並顯示 MsgBox(對話框),新的熱鍵仍可以運行。
小鳥學AHK(5)之高級教程:熱字串和自動擴展
2008-07-10 23:58
下面很麻煩,簡單的用法看(1)就可以了,其實就是兩個雙冒號之間插入縮寫詞,其后加上觸發結果,擴展就是第一個雙冒號間可以加參數改變具體的觸發行為,高手您慢慢看(原文來自yonken翻譯的AHK的幫助文檔。
熱字串主要用來實現自動擴展,例如當你鍵入一些單詞的縮寫時自動擴展成完整詞句,不過熱字串也同樣可以用來執行任何腳本動作,在這一方面它和 熱鍵 類似,但它們由更多的字符組成,因此才被稱為熱字串。
要定義一個熱字串,只需要在兩個雙冒號之間插入縮寫詞,其后加上觸發結果(替換文字)即可。例如:
::btw::by the way
在上面的例子里,當鍵入btw這個縮寫之后,再鍵入 結束符(ending character)即觸發熱字串,使其自動擴展為"by the way"。結束符可以是指空格、句號或回車(如果要直接觸發熱字串而不必鍵入結束符,可以使用 * 選項)
注意:后面的語句不能是中文,否則會變成亂碼! :( 若要使用中文語句,可參考下面的 方法:
這個例子中熱字串的作用就是自動地把"btw"刪除然后替換為"by the way"從而實現所謂的自動擴展。另外,正如上面所說,熱鍵串還可以用來定義其他動作,不過記住要把相關命令置於熱鍵串之下:
::btw::
MsgBox 您鍵入了"btw"。;鍵入btw及結束符將顯示此對話框,而btw將被刪除(請看下面的說明)
return
盡管上面的熱字串不屬於自動擴展的一類,但用戶鍵入的縮寫詞仍會被自動刪除,這是因為它的默認設置為自動發出退格命令。如有需要可以使用 b0 選項 來取消這一設置。
結束符
在默認狀態下,用戶必須在鍵入熱字串的縮寫詞后再鍵入一個縮寫詞,使用 * 選項 即可免去這一步。
結束符默認是指這些字符:-()[]{}':;"/\,.?!`n `t (注意:`n代表回車,`t代表Tab,在`n和 `t之間還有一個空格)。您可以仿照下面的語句來更改這一設置:
#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t ;右邊的所有字符串都被定義為結束符
選項
熱字串的默認行為可以有兩種方法改變:
使用 #Hotstring 命令,用它結合下面的選項進行的設置會影響到其下腳本中的所有熱字串,例如:
#Hotstring c r ; 區分大小寫並且"發送原文";
在熱字串的前兩個冒號之間插入一個或多個選項,例如:
:c*:j@::john@somedomain.com ; 區分大小寫並且取消結束符(也就是說不用結束符即可觸發熱字串)。
注意:當使用超過一個選項(下面列出)的時候,空格鍵可被隨意添加到這些選項之間(而不會有影響)。
* (星號):不再需要結束符(例如空格和回車等等)來觸發熱字串。使用 *0 來恢復。在下面的例子里,當@號一被按下即觸發熱字串從而自動擴展縮寫:
:*:yk@::yonken@163.com
? (問號):鍵入任何含有縮寫詞的詞句都會觸發熱字串。舉個例子,對於 :?:al::airline 這個熱字串來說,鍵入含有"al"的"practical"這個單詞將會生成"practicairline"(只是al被替換成了airline而不是整個單詞,注意到了嗎?)。 使用 ?0 (問號后面一個零)來恢復。
B0 (B后面接一個零): 自動退格刪除縮寫詞的功能將被禁止。取消此功能后若想恢復可使用 B 選項。
C: 區分大小寫:用戶鍵入的縮寫詞必須和腳本中的嚴格一致(也就是說區分大小寫)。使用 C0 (C后面接一個零)來取消此功能。注意:如果您需要為同一個縮寫詞分開定義為兩個只有大小寫格式不同的熱字串的話,那么請在其中一個熱字串的前兩個冒號之間插入空格,用以和另外一個熱字串區分。這樣做是有必要的,因為熱字串屬於標識,而每個標識必須是唯一的。在下面的這個例子里,第一個熱字串使用了一個額外的空格來與第二個區分:
:c :ceo::chief executive officer
:c:CEO::Chief Executive Officer
C1: 取消匹配大小寫。使用這個選項來使得那些自動擴展的熱字串對大小寫不再敏感(即輸出結果將和熱字串中定義的完全一致)。使用C0 來恢復。熱字串默認狀態下是匹配大小寫的,如果用戶鍵入的縮寫詞全部都是大寫則輸出的結果也全部大寫;如果鍵入的第一個字母是大寫則輸出的第一個字母也會是大寫;其他情況的輸出結果將和熱字串中定義的完全一致。下面針對此熱字串--:c :ceo::chief Executive officer來詳細說明:124219529@qq.com
若鍵入CEO加結束符則輸出結果為CHIEF EXECUTIVE OFFICER(全部字母都大寫);
若鍵入Ceo/CEo/CeO等則輸出結果為Chief Executive officer(也就是說只是第一個字母改為大寫而已);
其他格式的輸出結果都是和熱字串原來定義的一致,也就是chief Executive officer。
Kn: 按鍵延遲;通常來說幾乎所有使用自動退格和自動擴展功能的熱字串的按鍵延遲都是0。設置為零是被推薦的,因為這樣既迅速而又可以很好地配合其它進程(由於內部設置了 Sleep 0)。若需要設置延遲,則給變量 n 賦值即可。用 -1 來表示完全沒有延遲,如果您的CPU經常性的處於重負荷狀態的話,這會使自動擴展的速度加快。
O: 當自動擴展的文字生成的時候省略結束符。這在你需要結束符來觸發熱字串而又不想讓它輸出到目標的時候非常有用。例如:通常我們是這樣設置熱字串的-::ar::aristocrat,當鍵入"ar"和空格會輸出"aristocrat "(它畫蛇填足地在后面添加了空格符);而當使用O選項后也即o:ar::aristocrat ,鍵入"ar"和空格會輸出"aristocrat",注意它是沒有空格符在后面的。使用O0 (字母O后面接一個零)來恢復。
Pn: 設置熱字串的 優先級 (例如 P1)。此選項對實現自動擴展功能的熱字串沒有影響。
R: 發送替換文字的原文。也就是說熱字串將完全一致地輸出原文而不會解釋{Enter}或^c這些特殊的字符串,從而避免那些有 延續部分(continuation section) 的熱字串自動發出回車或Control-C等等命令, 使用 R0 (R后面接一個零)來恢復。
Z [v1.0.30+]: 每觸發一次熱字串則重設一次熱字串識別器。這里的意思是腳本將會在每次熱字串觸發后消除對前一次鍵入內容的識別並等待新的熱字串。舉個例子來說明一下,下面的熱字串沒有Z選項,所以鍵入111后熱字串將會觸發兩次而不是一次:
:b0*?:11::
Send xx
return
只要在b0前面插入一個Z,就必須鍵入1111而不是111來觸發兩次熱字串。 使用 Z0 (Z后面接一個零)來恢復。
大段替換文本
在 v1.0.32以上版本中,通過添加 延續部分(continuation section),熱字串可以輸出大段的替換文本。例如:
::text1::
(
Any text between the top and bottom parentheses is treated literally, including commas and percent signs.
By default, the hard carriage return {Enter} between the previous line and this one is also preserved.
Also, the indentation {Tab} to the left of this line is preserved by default.
See continuation section for how to change these default behaviors.
)
特別需要注意的是,延續部分不能直接使用中文字符,否則會輸出亂碼,解決方法請參考下面。
延續部分的存在同時使得熱字串從默認模式變為 原文模式。留意上面的文字,{Enter}和{Tab}都不會被認為是按鍵指令,要撤銷這一設置的唯一一個方法是在每一個有延續部分的熱字串中使用 r0 選項。
注意
熱字串輸出的語句是不直接支持中文的,不過也可換個思路,借助clipboard命令賦予剪貼板自定義的文字,然后通過發送Ctrl+V的方法來輸出中文,例如:
::sbs::
clipboard = 順便說一下
Send, ^v
Return
目前類似%MyVar%這樣的變量參數不支持在替換文本中使用。要使用它們就不能把熱字串設為自動擴展而是在縮寫詞之下使用 Send(發送) 命令並用一行Return接上。
內建變量 A_EndChar 就是那些用以觸發最近的非自動擴展類的熱字串的結束符。如果不需要結束符來觸發(*選項的作用),那么它的值為空。此變量對於那些使用發送(Send)命令的熱字串或那些鍵入不同結束符而有不同行為的熱字串來說比較有用。要發送結束符自身,需要使用"SendRaw %A_EndChar%"(之所以使用 SendRaw(發送原文) 是因為類似 !{} 這樣的字符不能通過普通的發送(Send)命令正確發送。
盡管在熱字串定義式中的逗號、百分比符號和單冒號不需要進行 轉義,但是那些有空格和空位(Tab)在其左邊的重音符和分號就需要轉義。請查看 轉義列表 獲得詳細的列表。
盡管 Send(發送)命令的語法 被支持用在自動擴展文本部分(除非用了原文(raw)選項),但熱字串的縮寫詞本身不能用它來表示。也就是說,在縮寫詞里不用{ENTER}來表示回車鍵或用{SPACE}來表示空格鍵。取而代之的方法是使用 `n 來表示回車以及用 `t 來表示跳格(Tab)(請查看 轉義列表 獲得詳細的列表)。 下面舉個例子說明:
:*:ok{ENTER}::no problem ; 鍵入"ok"再加一個回車鍵不能觸發熱字串,除非鍵入完整的ok{ENTER}。
:*:ok`n::no problem ; 鍵入"ok"再加一個回車鍵即可觸發熱字串。
熱字串定義了空格和空位(Tab)將被直接認作是字符本身,例如下面的熱字串將產生兩種不同的結果:
::btw::by the way
::btw:: by the way ; 比上面多了一個空格,那么這個空格也會嚴格地輸出來。
熱字串的縮寫詞不可以超過30個字符。如果長度超出了程序會提醒您的。熱字串的替換文本也有AutoHotkey最大行數的限制,但它最多可以達到16,383個字符。不過也可以通過一個巧妙的方法來突破這一限制,那就是在熱字串中使用 Send %自定義變量% 。 例如您可以預先設置自定義變量並賦值為超過限制部分的字符,然后在熱字串中調用即可。
熱字串的先后順序決定了它們的優先級,換句話來說就是如果有超過一個的熱字串符合用戶鍵入的內容,則只有排在最前面的那個熱字串才會生效。
運行腳本時用戶進行的任何退格行為都將被視為企圖核對熱字串。但是,如果用戶在編輯器中使用了上/下/左/右箭頭、PageUp、PageDown、Home和End這些按鍵時將導致熱字串識別重設,也就是說消除對這一次鍵入內容的識別並等待新的熱字串。
即使處於激活狀態的窗口忽略用戶的鍵擊行為熱字串也依然可以輸入,也就是說就算替換文本不可見熱字串還是會被觸發。此外,退格鍵也還是會撤銷最近的鍵擊,盡管您看不到效果。
可以使用 Gosub 或 Goto 來轉到指定的熱字串標識(Label), 只要在標識名前面加上一對冒號即可。不過,如果在冒號之間沒有選項符則必須對雙冒號進行轉碼。例如: Gosub `::btw
盡管熱字串不被監控而且在不可見的 輸入(Input) 命令生效期間將不會被觸發,但可見的輸入是可以觸發它們的。
熱字串不會被AutoHotkey腳本發出的鍵擊行為觸發。這樣避免了發生熱字串反復觸發導致無限循環的可能。
在某些方面來說 輸入(Input) 命令比熱字串更加靈活。例如,它允許在激活窗口中鍵擊的不可見(例如游戲)。它還支持像Escape鍵這樣的非字符式結束鍵。
所有包含熱字串的腳本都將自動使用 鍵盤鈎子(keyboard hook)。
熱字串和熱鍵的相同反應:
它們都會受到 中斷(Suspend) 命令的影響;
都服從 #MaxThreads 和 #MaxThreadsPerHotkey (除了#MaxThreadsBuffer)的設置;
含有熱字串的腳本都將自動 持續(persistent);
非自動擴展類的熱字串運行時將會創建新 線程(thread),此外它們還將更新內建的熱鍵變量,例如 A_ThisHotkey 。
小鳥學AHK(6)之鼠標動作
2008-08-27 09:32
下面開始講課,主要就一個命令,學好它基本就能實現簡單的大部分行為了。認真聽講啊。
click 30,40 right 2 r
(1) (2) (3) (4)
(1)坐標,可用函數如 %x%,%y%,省略則默認為當前位置。(坐標默認的是相對於當前窗口,不是屏幕,當然這個默認是可以改的,你要改么?嗯?你有這么厲害?那別看了)
(2)right 右鍵,left左鍵,middle 中鍵,省略則默認left
(3)鼠標行為:
數字表示點擊次數:省略則默認為1;寫0的話則表示移動鼠標(不點擊再加上坐標當然是移動了,什么?你不加坐標?別逗電腦了);
down為按下,up 為彈起,用這兩個組合起來實現拖動。
(4) r ,表示坐標是以當前鼠標位置為原點的相對坐標,省略則默認是絕對坐標,原點在哪?窗口左上角啊,前面剛說完。
舉例:
click ;當前位置鼠標單擊左鍵
click 2 ;當前位置鼠標雙擊左鍵
click 30,40 0 ;移動鼠標到30,40
click 30,40 down
click 50,60 up ;這兩行組合在一起即是拖動某東東
高手進階
一,滾輪
click wheelup 2 ; 滾輪向上滾2次,數字省略則默認為1次,如
click wheeldown ; 滾輪向下滾一次. wheelup 可以寫成WU,相對應的就是WD了。不過有些程序不認數字,所以最好采取兼容性更 高的循環法,如
loop 5
click WD ; 向下滾5次
二,sendmode模式
是為了實現特殊點擊,而且兼容性更高,要習慣多用這種模式哦,
比如要實現ctrl+鼠標雙擊
send ^{click 100,200 2}
三,設置延遲和鼠標移動速度
有時為了讓觀眾能看清楚鼠標動作,有必要設置一下速度
SetDefaultMouseSpeed 30; 默認的是2 ,可以從0調到100,越小越快,調0您的鼠標就是博爾特了
每個鼠標動作結束之后,為了能讓電腦反應過來做下個動作,默認都有個延遲,默認是10毫秒
SetMouseDelay 30; 我改成30了,有必要么,沒什么必要,不過省得你寫一堆sleep 30了
四,取當前點坐標,窗口或控件
MouseGetPos x,y m, n ;四個變量,當然都可以省的,但省的時候得留下逗號,這行執行完了后,變量x和y的值就是取得的坐標,m變量為當前鼠標懸停的窗口的ID,n為當前鼠標懸停的控件的名稱(ClassNN),估計目前的您還用不着,mn省了吧。
基本上以上這些就OK了,完完全全的夠用,MouseClick,MouseMove什么的菜鳥就別看了,人的記憶細胞是有限的,一個萬能的click多靈活啊。要是controllclick翻譯出來了,那鼠標的部分我就OK了。最后感謝一下AHK翻譯小組的辛苦。我在此也不過是做了一個白話和濃縮介紹的工作,希望沒有版權問題。
小鳥學AHK(7)之數學命令
2008-09-02 09:12
總結幾個我能看懂的並且好總結的命令。
1.付值
看一下下面的例子,猜一下y的值
x=1
y=x ;y的值是1么?非也,y的值是x,是一個字符
y:=x ;這回y的值才是1, :=x 的作用是把右邊的表達式執行並將結果傳給y,永遠記住自己在干什么
2.遞加遞減遞乘遞除
EnvAdd, x, 3 ;等效於下行的代碼
x +=3 ;每執行一次,X值都會自動加3,這種不用記命令,是上行代碼的簡寫形式,推薦使用。
x++ ;因為增值為1的命令經常會用到,所以有更簡單的寫法,相當於 x +=1 ,推薦常用。
其它用法與遞加相同,遞減:EnvSub, 遞乘: EnvMult, 遞除: EnvDiv, 舉例如
x=100
loop 2
{
x /=10
x--
x *=2
} ; 拿計算器算算吧,看是不是1.6,遞加就是這樣和循環一起用的。怎么沒有 x** 的?豬啊你!
3.隨機
Random, x, 1,100 ; 在1到100之間隨機一個值給x,簡單吧,先這么地吧
4.條件
if (x < y)
{
}else{
} ;太難了,我解釋不清,悟性好的自行參悟吧,哈哈,下面的條件命令和它一樣的
IfEqual, x, 3 ; 相當於if x=3
IfNotEqual, x, 3 ; 相當於if x<>3
IfGreater, x, 3 ; 相當於if x>3
IfGreaterOrEqual, x, 3 ; 相當於if x>=3
IfLess, x, 3 ; 相當於if x<3
IfLessOrEqual, x, 3 ; 相當於if x<=3 , 唉,我怎么覺得解釋才更好用呢,為了能讓讀程序的人看懂,多記一記吧
If x ; 這也可以?當然了,x不也是表達式么,空或0就返回fault,有值就返回true唄
if x (not) between 1 and 5 ; 哎我口好干
if x is type ;判斷x的類型的,type有integer,float,等等八九個,自己查吧
5.其它
SetFormat, NumberType, Format ;設置數學運算得到的整數或浮點數的格式。比如
SetFormat, integer, H ;設置整數類型為十六進位格式,用不上吧你哈哈
Transform, x, Cmd, Value1 [, Value2] ;CMD表示某種運算方式,后面則是它所須要的參數,比如
Transform, x, Asc, A ; 把A的阿克斯碼值傳遞給x,個人覺得就是函數方式x:=Asc(A)另一種寫法。
搞定大家支持一下
6.遞加進階
這部分有點難,我都沒太搞明白
EnvSub, Var, Value, TimeUnits ;相當於下面這行
Var -= Value, TimeUnits ;遞加遞減都可以,var就是我常用的變量x, value就是遞變的數值,只不過最后加了一個TimeUnits參數,我理解的意思是按照時間的格式進行遞變,時間格式就是YYYYMMDDHH24MISS 這樣的數值形式,比如現在是08年9月1日下午5點15分20秒,用時間格式表達就是20080901171620,TimeUnits參數自然就有years,months,days,hours等幾種了,咱們還是看例子吧
x=20050126
x -=20040126, days ; x值是366,因為2004年是閏年啊,哈哈。這種遞變一般是用來做計時用,比如2010年全球病毒大暴發。。。再引用一個倒計時1分鍾並顯示提示的聽歌腳本的部分代碼,
倒計時=%A_Now% ;A_Now是系統當前時間
EnvAdd,倒計時,1,Minutes ;這里的倒計時變量將在下面循環括號中的if語句中參與其表達式的計算
Loop
{
倒計時傳遞=%倒計時%
EnvSub,倒計時傳遞,%A_Now%,Seconds ;之所以設置一個倒計時傳遞變量,是為了避免和下面的if語句中的倒計時變量重名,下面的倒計時 變量必須引用循環外那個加了1分鍾的。
ToolTip,%倒計時傳遞%秒后開始休息:-)
Sleep,33 ;如果為零,循環將占用cpu50%。0~20一般沒實際意義。
If A_Now>%倒計時% ;將當前獲取的時間和循環括號外多加1分鍾的倒計時變量進行判斷
{
ToolTip ;將置頂提示清空
Break ;退出此循環
}
附錄:新鮮出爐的快速啟動,快來嘗鮮
2008-09-02 09:10
一直以來在努力習慣win+r啟動,失敗
一直覺得WIN自帶的快速啟動欄是最好的,可惜不排序,而且也經常因為單列太長找不到程序。。。
所以做了個類似的純文字版的表格式的快速啟動,圖標是給老外看的,漢字本來就是象形,我看漢字比圖標快。。。所以就不加圖標了
雖然仍然有點小問題,但基本還算滿意了,這才是我真正意義上的第一個完整的程序吧
使用方法:
代碼默認快速啟動目錄為 我的文檔\Quick Launch\下了,所以你要么改個目錄要么建它,
里面的程序快捷方式文件名的前10字符不要有相同,不要有空格或特殊符號,否則會出錯,
第一次運行 WIN+x 初始化,以后每次有變化都要WIN+x 一下,
然后你就可以享受任時任地的啟動快感了: WIN+鼠標右鍵或WIN+空格
如果你編譯成exe的話,就不好用了。請在AutoHotKey.ini里調用。
這幾行破代碼還費我半周時間琢磨,希望高手來改善。
現在發現一個bug,WIN+鼠標右鍵的時候,如果右鍵點慢了會出現窗口最小化
請先用WIN+空格的方式試試
#RButton::
#Space::
IfNotExist, temp.ahk
{
msgbox, 第一次運行、目標文件夾內容有變化、出錯請按WIN+x初始化或修正,對AHK有興趣的朋友請加群15155327, by 寂起寞飛(wildtoy)
return
}
MouseGetPos, zbx,zby
zbx := zbx-250
zby := zby-75
x:=0
y:=0
Loop, %A_MyDocuments%\Quick Launch\*.*
{
a:=x*100
b:=y*30
StringTrimRight, tempfilename, A_LoopFileName, 4
StringLeft, tempfilename, tempfilename , 10
Gui, Add, Button, x%a% y%b% w100 h30 , %tempfilename%
x++
if x=5
{
x -=5
y++
}
}
Gui, Show, x%zbx% y%zby% w500,5326858
return
#Include *i temp.ahk
#x::
IfExist, temp.ahk
{
filedelete , temp.ahk
sleep 30
}
Loop, %A_MyDocuments%\Quick Launch\*.*
{
StringTrimRight, tempfilename, A_LoopFileName, 4
StringLeft, tempfilename, tempfilename , 10
FileAppend,
(
Button%tempfilename%:
gui,destroy
run %A_LoopFileFullPath%
Reload
sleep 2000
return`n
) , temp.ahk
} ;;按鈕激發執行程序,並退出界面
Reload
sleep 2000
return