天天看點

AHK(1)之運作程式或打開文檔

小鳥學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:[email protected]

上面例子中的指令都可以指配給含有 熱鍵辨別(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}模拟了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::[email protected]

;經常要輸入電郵位址,電郵太長怎麼辦,像這樣以後隻要輸入/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 - (小鍵盤上的)Enter鍵

當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鍵和Enter鍵來切換()

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@::[email protected] ; 區分大小寫并且取消結束符(也就是說不用結束符即可觸發熱字串)。

注意:當使用超過一個選項(下面列出)的時候,空格鍵可被随意添加到這些選項之間(而不會有影響)。

* (星号):不再需要結束符(例如空格和回車等等)來觸發熱字串。使用 *0 來恢複。在下面的例子裡,當@号一被按下即觸發熱字串進而自動擴充縮寫:

:*:yk@::[email protected]

? (問号):鍵入任何含有縮寫詞的詞句都會觸發熱字串。舉個例子,對于 :?: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來詳細說明:[email protected]

若鍵入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}來表示Enter鍵或用{SPACE}來表示空格鍵。取而代之的方法是使用 `n 來表示回車以及用 `t 來表示跳格(Tab)(請檢視 轉義清單 獲得詳細的清單)。 下面舉個例子說明:

:*:ok{ENTER}::no problem ; 鍵入"ok"再加一個Enter鍵不能觸發熱字串,除非鍵入完整的ok{ENTER}。

:*:ok`n::no problem ; 鍵入"ok"再加一個Enter鍵即可觸發熱字串。

熱字串定義了空格和空位(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

轉載于:https://www.cnblogs.com/echorep/p/4911117.html

繼續閱讀