實用工具測試報告分類文章 顯示方式:簡文 | 列表

2008年04月10日

輕鬆學會彈指神功-揭露AutoHotkey絕技

AutoHotkey的高度客製功能,讓你成為效率高手

如果你分析每天操作電腦時所重覆執行的動作-相同的網址、相同的電子信箱、相同的文字輸入等等,你會驚訝的發現重覆頻率之高令人咋舌。如果你想從諸多的重 覆動作裡解脫而出,並且能有效提升操作電腦的效率,那麼AutoHotkey是你不能錯過的工具,善用AutoHotkey將讓你輕而易舉的成為效率高 手。

AutoHotkey小檔案
AHK-Icon
軟體性質:免費軟體
版本代碼:1.0.47.05
作業系統:Windows
檔案大小:1969 KB
語言介面:英文
官方網站:http://www.autohotkey.com
軟體下載點:http://www.autohotkey.com/download/AutoHotkeyInstall.exe
腳本檔範例下載點:http://www.mediafire.com/?myzblw2zgmb

AutoHotkey:鍵盤與滑鼠工具

AutoHotkey顧名思義就是協助你將常用按鍵自動化的工具,而這些自動化的操作可以由使用者依自身的需求來設置,隨著設定的項目日漸擴充齊全, AutoHotkey帶給你的便利也日益增多。AutoHotkey好處多多,只要幾個簡單步驟安裝好,再建立一個寫有AutoHotkey指令的文字檔 案(這個檔案稱為AutoHotkey的腳本檔)就能開始享受它帶來的速度感與便利性。「咦~還要寫指令?會不會很困難,我只是會用電腦的使用者而已 呀!」別怕別怕,不要被「指令」這兩個字嚇到了,建立腳本檔的過程就只是像是打篇文章而已,請耐心的看下去,本文會一步一步地把建立腳本檔的步驟清楚、簡 單的介紹給你,讀者們只要依樣畫葫蘆馬上就能感受到AutoHotkey的強大威力了!

在正式開始之前,先把AutoHotkey提供的功能以它本身的術語介紹給你:
  • 熱鍵(HotKey): 熱鍵也可稱為快捷鍵(Shortcut Key),意指某個按鍵能執行特定的功能。在Windows系統裡,〔Win+E〕開啟檔案總管、〔Win+R〕開啟執行視窗是幾個常用的熱鍵之二。而 AutoHotkey的熱鍵功能則讓你自行建立專屬你個人的快捷鍵。

    雖然HotKey的對象似乎只限鍵盤,但事實上連滑鼠的按鈕、滾輪與搖桿也都能依你的需要來設置。
  • 熱字串(HotString): 熱字串是比照熱鍵而來的名詞,有的系統會稱呼為「縮寫」,指的是輸入較短的字串(縮寫的關鍵字)而能自動擴展成較長的文字,例如只要輸入「inet」四個 英文字母就能自動變成「網際網路」,而更令人興奮的是:所有的熱字串都是你自已設定的。
  • 操作流程的判斷與迴圈控制: 如果AutoHotkey只具備了鍵盤與滑鼠的自訂功能,那它充其量也不過是個鍵盤工具罷了,但事實上AutoHotkey提 供了許多指令用來判斷諸多事項,具備程式控制能力,因而晉身為巨集(Macro)工具,能依需要再做更細部的處理與控制。我們可以簡單地把巨集或腳本視為 一種簡易、好寫的程式,雖說簡單但功能可是一點也不馬虎。
  • 圖形介面與腳本合體:AutoHotkey 也提供了許多視窗、按鈕等圖形介面的指令,能讓我們很輕易的建立操作用的小視窗,從而提供了更方便與更優越的使用介面,而這些指令都能透過一支 SmartGUI.exe執行檔用拖拉的方式來自動產生。
AutoHotkey的基本功能介紹完畢,以下進入主題。首先說明AutoHotkey的安裝步驟。

AutoHotkey下載與安裝

1. 使用IE或FireFox等瀏覽器進入下載網頁,點選「AutoHotkey」進行下載,當「檔案下載」對話盒出現後,選取你常用的工具資料夾,把檔案存 入此資料夾。

AHK-2

2. 下載後的「AutoHotkey104705_Install.exe」就是安裝執行檔,請雙擊此檔案以執行安裝步驟。首先按〔Next〕。

AHK-2


3. 在授權頁裡可以確認AutoHotkey是使用GPL授權的,因此你可以安心使用。閱讀授權說明完畢後再按〔I Agree〕進入下一頁。

AHK-3

4. 接著選取要安裝的類型,如果想啟動.ahk檔案的拖拉功能的話,則把第三項的【Enable drag & drop onto scripts】選項勾選起來,同時保持【Main Program】和【Script Compiler】的勾選狀態,最後按〔Next〕。

AHK-4

5. 最後指定安裝的資料夾,預設是「C:\Program Files\AutoHotkey」,你也可以把它裝到USB隨身碟裡,以增進可攜性。資料夾選取好後按〔Install〕。

AHK-5

6. 檔案解壓縮並複製後按「Finish」即告全部安裝完畢。若不想檢視讀我檔案的話,則取消〔Show Readme〕勾選。

AHK-6

AutoHotkey安裝完成後不必重新啟動電腦,爾後副檔名.ahk會自動關聯到AutoHotkey.exe,只要點擊副檔名為.ahk的檔案就能啟 動AutoHotkey來讀取該檔案的內容,再依腳本檔內容來設置鍵盤與滑鼠。AutoHotkey安裝資料夾裡有幾個重要檔案要請大家注意:

檔案名稱

功能說明

AutoHotkey.exe
AutoHotkey.chm

AutoHotkey的主程式與說明檔。AutoHotkey.chm具有搜尋功能,是很好的學習參考文件

AU3_Spy.exe

Active Window Info,顯示視窗系統訊息的小工具,這些 訊息對進階的腳本撰寫很有幫助

SmartGUI.exe

用拖拉的方法來定義視窗與其內的各種視覺元件,最後產 生AutoHotkey的腳本檔。這個工具可以說是一個程式產生器

AutoScriptWriter.exe

一樣是個產生AutoHotkey腳本檔的產生器,不過是採取錄製鍵盤與滑鼠操作過程的方法來產生腳本內容

Ahk2Exe.exe

把腳本檔產生成執行檔的工具,以方便沒有安裝AutoHotkey系統的環境能用執行檔直接執行。Ahk2Exe.exe是命令列指令,語法如下:

Ahk2exe.exe /in "test1.ahk" /icon "test1.ico"


總之,我們只要把AutoHotkey的設定與指令寫在副檔名為.ahk的文字檔裡,就能設定需要的動作。以下我們由淺入深、按部就班地展示 AutoHotkey的各項功能。

由簡單的範例開始使用AutoHotkey的熱字串

1. 請用【開始→程式集→附屬應用程式→記事本】啟動記事本(或使用你慣用的文字編輯程式),輸入以 下內容後儲存成 test1.ahk。

AHK-7

以上是常用網址與常用電子郵件的幾個熱字串範例,提示幾個重點:
  • 每行開頭若以半形分號開頭則表示此列是說明註解,不會被執行
  • 熱字串的關鍵字(或稱縮寫)必須用兩個半形冒號夾住,再把要擴展的結果寫在結尾的冒號後面,只能寫一行(多行的寫法請見後面的說 明)
  • 雖然範例中的關鍵字只有一個字母,實際運用上可任意組合多個字母與數字
雙擊test1.ahk後就能在System Tray裡看到AutoHotkey的H圖示,表示已執行並載入test1.ahk。我們另行建立一個test.txt來測試,開啟test.txt後, 只要鍵入「y!」與一個觸發符號(此符號可以是〔空白〕、〔Tab〕鍵或〔Enter〕鍵等,能透過指令定義),則關鍵字會替換成冒號後面的內容:

輸入文字

觸發符號

替換後的內容

y!

空白

http://tw.yahoo.com/

g!

Tab

http://www.google.com.tw

w!

Enter

http://www.wretch.cc

@g

空白

@gmail.com

@m

空白

@Your_Mail_Address.com.tw


觸發符號要使用〔空白〕或〔Enter〕鍵悉聽尊便,我個人是習慣用〔空白〕。另外,為了避免在中文輸入狀態下使用到拆字按鍵而造成中文無法正常輸入,建 議關鍵字以一個特殊字元開頭或結尾,例如範例中的驚歎號與@符號,不過此二符號必須加按〔Shift〕鍵,不甚方便也影響輸入速度,建議可使用單鍵符號, 例如單引號、分號、斜線或逗點等來組成關鍵字,我個人常用的是單引號、斜線與逗點,最好是選用中文輸入法未使用到的字元,以方便能在中文狀態下也能輸入。 以下是修改成單引號與斜線後的範例:

輸入文字

觸發符號

替換後的內容

'y

空白

http://tw.yahoo.com/

'g

Tab

http://www.google.com.tw

'w

Enter

http://www.wretch.cc

/g

空白

@gmail.com

/m

Tab

@Your_Mail_Address.com.tw


編輯修改test1.ahk後必須重新載入才能讓變動生效,重新載入有兩種方法:
  1. 在右下角System Tray找到AutoHotkey的H圖示後,按右鍵選【Exit】以結束目前的AutoHotkey,再雙擊修改後的test1.ahk以重新啟動 AutoHotkey
  2. 第二個是較簡便的方法,一樣開啟System Tray的H圖示後,按右鍵選【Reload This Script】即可重新讀入修改後的腳本指令
AHK-8

常用的幾種熱字串範例

讀者們可以自行彙總日常常用的字串,將之設置於.ahk檔案內,再把.ahk檔案存到啟動資料夾裡,如此便能自動重覆使用了。筆者彙總幾類常用的字串供各 位做參考與當做你設定的啟始內容,你可由http://www.mediafire.com/?myzblw2zgmb下載test1.ahk或把下列表 格的前兩欄「關鍵字」與「替換後的內容」寫入test1.ahk即可:

關鍵字

替換後的內容

說明

分類

::'g::

http://www.google.com.tw

Google網 站

常用搜尋網站

::'y::

http://www.yahoo.com.tw

Yahoo!網 站

::'l::

http://www.live.com

微軟Live Search網站

::'dic::

http://dictionary.yahoo.com.tw

Yahoo!奇 摩字典

字典網站

::'cdic::

http://140.111.34.46/newDict/dict/index.html

教育部重編國語辭典修訂本網站

::@g::

@gmail.com

 

常用電子郵件

::@h::

@ms1.hinet.net

 

::'tk::

Thanks.

內容也可用「謝謝」,端視使用頻率而定

常用郵件文字

::btw::

By the way,

 

::'br::

Best regards,

 

::'sy::

Sincerely yours,

 

::'me::

我的名字

你的姓名。輸出的竟是亂碼?等等,後面有破解方法

個人資訊


熱字串配合使用AutoHotkey的按鍵字串

如果你在瀏覽器網址列輸入範例內的熱字串後,可能會想是否能讓熱字串能自動輸出〔Enter〕鍵呢?如果可以的話,我們就可以少按一個〔Enter〕鍵 了,這個需求只要在熱字串裡加上按鍵字串就能輕而易舉的達成。AutoHotkey按鍵的寫法是在按鍵名稱前後加上大括號,因此{enter}就代表 〔Enter〕鍵,{home}就代表〔Home〕鍵,以下列舉幾個常用的按鍵:

{Enter}

Enter

{Escape}{Esc}

Escape

{Tab}

Tab

{Backspace}{BS}

倒退鍵

{Delete}

刪除鍵

{Insert}

插入鍵

{Up}{Down}{Left}{Right}

方向鍵

{PgUp}{PgDn}

換頁鍵

{CapsLock}

大寫鍵

{NumLock}

數字鎖定鍵

{Ctrl}

{LCtrl}{RCtrl}

控制鍵與左、右控制鍵

{Alt}

{LAlt}

{RAlt}

Alt鍵與左、右Alt


上面的寫法除了鍵盤之外,滑鼠按鈕也能用相同的格式來表示,例如:

{LButton}

{MButton}

{RButton}

左、中、右鈕

{WheelDown}

{WheelUp}

滾輪向下與向上


按鍵字串裡若加上數字代表連續輸出數個相同的按鍵,例如{Left 3}表示輸出3個左鍵(務必只用半形字元,全形是無法使用的),等於{Left}{Left}{Left},按鍵字串和數字的間必須以至少一個半形空白分 隔開。熱字串加上這些按鍵的組合能夠形成更多樣化的功能,例如:

關鍵字

替換後的內容

觸發符號

說明

::'y::

http://tw.yahoo.com/{Enter}

空白

輸入'y會 輸出網址與〔Enter〕 鍵

::/g::

@gmail.com{Home}

空白

輸入/g會 輸出電子郵件並將游標移到開頭位置(如同按下〔Home〕 鍵)

::'img::

<img src=””>{Left 2}

空白

輸入'img替 換成<img>標 籤,且將游標移到雙引號裡面,但因為AutoHotkey預 設會把觸發符號也輸出,造成游標左移到雙引號裡後又多輸出當做觸發符號的空白


AutoHotkey熱字串的替換依據不同的需求會有不同的選項,使用者能很方便地設置不同的功能;熱字串選項是寫在開頭兩個冒號中間,格式是「:選項:」,舉幾個例子說明常用的選項:

關鍵字

替換後的內容

觸發符號

說明

:O:'img::

<img src=””>{left 2}

空白

必須按觸發符號以替換文字,但不輸出觸發符;只要把開頭的兩個冒號改成:O:即可。OOmit(忽略)的意思,用來忽略觸發 符號

:*:@g::

test@gmail.com

:*:表 示不需要觸發符號,鍵入@g兩個字元後,立刻替換內容

:B0:<html>::

B零)

</html>{Left 7}

空白

AutoHotkey預 設會把關鍵字刪掉(即觸發後自動執行倒退以刪掉關鍵字),此倒退功能可以使用:B0:選項將之取消,如此關鍵字在替 換後仍會保留下來,再附加替換後內容。

 

輸出結果:<html> |</html>|是游標位置),游標前會多出做為觸發 符號的一個空白

:*B0:<html>::

</html>{Left 7}

再多加一個星號就能不使用觸發符號,因而不會有上列多出一個空白的問題

 

輸出結果:<html>|</html>|是游標位置)


熱字串使用多列文字的方法

上面的例子每個關鍵字只能替換一列文字,若想輸出多列文字應該要如何設定呢?其實AutoHotkey提供了簡單的語法來達成這個功能:只要用各佔一列的 左右括號把多列文字夾起來就可以了。

::long1::

(

Dear xxx,

 

Best regards,

 

Your Name

)


AutoHotkey的熱鍵設定方式

熱鍵的設定也是很容易就能輕鬆完成,格式是「熱鍵::執行的指令」,熱鍵和要執行的指令間夾有兩個半形冒號。熱鍵有許多按鍵組合,以下是幾個特殊的按鍵符 號:

按鍵符號

代表的按鍵與說明

^

Ctrl〕 鍵

!

Alt〕 鍵

+

Shift〕 鍵

#

Win〕 鍵

&

&符 號把兩個按鍵或按鈕組合成為一個鍵,例如:LButton & a表示按左鈕不放,同 時再按〔a〕鍵

~

~符 號表示抑制該按鍵,使用在當我們想要把某個按鍵變更成另一個內容的場合。例如:
~a::Send BBB ;; 抑制原來的〔a〕 鍵,〔a〕 鍵替換成BBB
a::Send BBB ;;
按〔a〕 鍵輸出aBBB,比加了~的設定多輸出按下的按鍵


指定好熱鍵後,再接兩個半形冒號,再用預設的命令讓AutoHotkey執行特定任務,用範例說明:

熱鍵設定

指令說明

#n::Run notepad

按〔Win+N〕 鍵執行記事本程式(Notepad.exe
Run命 令表示執行後面指定的程式

^!F::run c:\program files\mozilla firefox2\firefox.exe

按〔Ctrl+Alt+F〕 鍵執行FireFox

~RButton::MsgBox 按了右鍵

按右鍵顯示「按了右鍵」對話窗,若在記事本裡操作,則原本的右鍵功能表會被「按了右鍵」對話窗取代了。
MsgBoxMessage Box的意思,彈出顯 示訊息對話窗

RButton::MsgBox 按了右鍵

彈出【按了右鍵】對話窗後繼續顯示記事本的右鍵功能表

~MButton & a::Send 送出訊 息

按滑鼠中鈕(兩個按鈕的滑鼠,中鈕就是滾輪)後用MsgBox函數顯示對話窗


多列式的熱字串是用括號夾住文字,同樣地熱鍵也能執行多列命令:每個命令必須各佔一行,開頭的空白內縮只是為了閱讀便利而已,沒有空白或空白的數目多寡皆 不會影響命令的執行,最後必須以return結束:

; 一 個〔Ctrl+Alt+F〕 按鍵先後啟動FireFox和 記事本
^!F::
  Run c:\program files\mozilla firefox2\firefox.exe
  Run c:\Wndows\notepad.exe
  return


設定好並重新載入後試一下是否成功了呢?咦?好像不行...很有可能是你電腦的系統目錄和範例裡的位置不同,比如作業系統的系統資料可能是C:\ Windows或C:\WINNT或安裝系統時自行指定的資料夾名稱,因此若想讓一個指令適用多個作業環境的話,就必須使用內建變數來替代固定的資料夾名 稱,以下是幾個你可能會使用到的與資料夾相關的內建變數:

內建變數

用途

範例

A_WinDir

Windows系 統資料夾

C:\WindowsC:\WINNT

A_ProgramFiles

程式集資料夾名稱

C:\Program Files

A_AppData

使用者個人資料夾

C:\Documents and Settings\使用者\Application Data

A_Desktop

使用者桌面資料夾

C:\Documents and Settings\使用者\桌 面


知道變數後再回頭修改指令,在使用變數時其前後要夾上百分號%。當然了,如果你的環境是固定的,直接寫成固定資料夾也不會有問題,反而還更快速呢。下面是 使用通用方式的寫法:

; 一 個〔Ctrl+Alt+F〕 按鍵先後啟動FireFox和 記事本
^!F::
  Run %A_ProgramFiles%\mozilla firefox2\firefox.exe
  Run %A_WinDir%\notepad.exe
  return


還有幾個和系統相關的內建變數,可以方便取出這些資訊:

內建變數

用途

範例

A_YYYY

傳回系統日期年度

::'d::
  d = %A_YYYY%/%A_MM%/%A_DD%
  Send %d%
  return

A_MM

傳回系統日期月份

A_DD

傳回系統日期日期

A_Hour

傳回系統時間小時

::'t::
  t = %A_Hour%:%A_Min%:%A_Sec%
  Send %t%
  return

A_Min

傳回系統時間分鐘

A_Sec

傳回系統時間秒數

Clipboard

剪貼簿內容

可以取用也可設值,在後面會有使用範例


接著我列出幾個我常用的按鍵設定當做大家使用的啟始參考範例:

; 按 〔Win+G〕送出@gmail.com字串
#g::Send @gmail.com

; 按 〔Win+H〕送出@hotmail.com字串
#h::Send @hotmail.com

; 按 〔Win+2〕送出公 司的電子信箱。用2的 原因是因為2@是同一個按鍵,方便記憶
#2::Send @your_mail_address.com.tw

; 按 〔Win+O〕開啟OpenOffice Writer
#o::Run %A_ProgramFiles%\OpenOffice.org 2.4\program\swriter.exe

; 按 〔Win+B〕啟動預 設瀏覽器並載入指定網址
#b::Run http://www.google.com.tw

; 按 〔Ctrl+Alt+C〕 開啟控制台視窗
^!c::Run %A_WinDir%\System32\control.exe

; 按 左鈕不放再按〔e〕啟 動記事本以編輯AutoHotkey腳 本檔
~LButton & e::Run %A_WinDir%\notepad.exe C:\Program Files\AutoHotkey\test.ahk

; 鈕不放再按〔r〕以重新載入(reload)腳本檔,使修改過的內 容能啟用
~LButton & r::
  reload
  return


AutoHotkey的中文運用

慘了,熱字串沒辦法輸出文字!?很可惜AutoHotkey對於Unicode的支援相當薄弱,造成熱字串沒有辦法直接輸出中文,幸好我們可以透過剪貼簿 解決這個中文問題。以下範例是輸入'addr與觸發符號後替換成地址的指令。

::'addr::
  current_clipboard = %Clipboard% ;
先把剪貼簿目前內容存入current_clipboard變 數
  Clipboard = 台北市中山區民生東路二段141B1 ; 電腦人公司的地址存入剪貼簿
  Send ^v ;; Ctrl+V執行貼上剪貼簿內容
  Clipboard = %current_clipboard% ; 再把剪貼簿還原回原本的內容
  return


我們可以用下列的熱鍵設定來方便輸入中文的標點符號。Word也有提供把特殊符號指定給按鍵的作法,但只能在Word裡使用,如果用AutoHotkey 設置,那麼不管你操作的是那一種程式,統統都能適用。

; 按〔Ctrl+點〕送出句點
^.::
  Clipboard =
; 把句點存入剪貼簿
  Send ^v ; 送出〔Ctrl+V〕貼上句點
  return

; 按〔Ctrl+半形逗點〕送出全形逗點
^,::
  Clipboard =

  Send ^v
  return

; 按〔Ctrl+單引號〕送出頓點
^'::
  Clipboard =

  Send ^v
  return

; 按〔Alt+分號〕送出全形分號
!;::
  Clipboard =

  Send ^v
  return

; 按〔Alt+1〕送出左箭頭
!1::
  Clipboard = ←
  Send ^v
  return

; 按〔Alt+1〕送出右箭頭
!2::
  Clipboard = →
  Send ^v
  return


接著我們再設置幾個中文括號,先把要放在括號裡的文字選取好,再按指定的按鍵就能把被選取文字夾在括號裡。由於這些按鍵的處理指令大同小異,只有括號的符 號不同而已,因此我們可以把指令集中到一個函數(send_bracket)裡。

![::
  current_clipboard = %Clipboard% ;
把原有剪貼簿內容存起來
  Clipboard = ; 把剪貼簿清空
  Send, ^c ; 把選取文字複製到剪貼簿
  ClipWait,1 ; 等待剪貼簿儲存動作完成
  clipboard = %clipboard%; 在剪貼簿前後加上全形括號
  Send, ^v{left} ; 貼上加了括號後的剪貼簿內容
  Clipboard = %current_clipboard% ; 剪 貼簿還原回原來內容
  return

^[::
  send_bracket("
", "")
  return

#[::
  send_bracket("
","")
  return

^]::
  send_bracket("
","")
  return

^![::
  send_bracket("
","")
  return

^!]::
  send_bracket("
","")
  return

send_bracket(start, end) {
  current_clipboard = %Clipboard%
  Clipboard =
  Send, ^c
  ClipWait,1
  clipboard = %start%%clipboard%%end%
  Send ^v{left}
  Clipboard = %current_clipboard%
  return

}


AutoHotkey的綜合運用:標示字串與搜尋

當我們在某份文件或某網頁上看到某個詞句想要用搜尋引擎來查詢時,大致會有下列四個步驟:
  1. 把該詞句存入剪貼簿
  2. 開啟搜尋引擎網站
  3. 貼上剪貼簿裡的詞句
  4. 按搜尋
如果透過AutoHotkey我們可以把動作簡化成兩個步驟:
  1. 選取要搜尋的詞句
  2. 按自訂的一個按鍵,例如〔Alt+G〕

; 選取文字後按〔Alt+G〕執行Google搜尋
!g::
  current_clipboard = %Clipboard% ;
把目前的剪貼簿內容存起來供後面還原
  Clipboard = ; 先把剪貼簿清空
  Send ^c ; 把選取字串用〔Ctrl+C〕存入剪貼簿
  ClipWait, 1 ; 等待1秒讓剪貼簿執行存入動作
  ; 下行使用Google執行搜尋動作,要搜尋的字串就是剪貼簿內容
  Run http://www.google.com.tw/search?hl=zh-TW&q=%Clipboard%
  Clipboard = %current_clipboard% ;
還原先前的剪貼簿內容
  return

; 選取文字後按〔Alt+Y〕執行Yahoo!搜尋
!y::
  current_clipboard = %Clipboard%
  Send ^c
  ClipWait, 1
  Run http://tw.search.yahoo.com/search?ei=UTF-8&p=%Clipboard%
  Clipboard = %current_clipboard%
  return

; 選取文字後按〔Alt+L〕執行微軟Live Search搜尋
!l::
  current_clipboard = %Clipboard%
  Send ^c
  ClipWait, 1
  Run http://search.live.com/results.aspx?mkt=zh-tw&q=%Clipboard%
  Clipboard = %current_clipboard%
  return


提升效率的好幫手

在簡要的介紹AutoHotkey的熱鍵與熱字串功能後,你是否也認為它確實能為你的電腦生活帶來更好的效率呢?必須額外付出的學習成本事實上也是相當低 廉的,為了更快速、更便捷的電腦生活,AutoHotkey是極佳的自我投資。

本文僅是基礎的入門介紹,以下列出幾個網站供想要更上層樓的讀者們參考:

AutoHotkey參考網站
本文摘錄自《Download!網路密技王》第三期

##

Posted by emisjerry at 樂多Roodo!22:27

2008年04月5日

[Tools] 快速切換常用資料夾的工具:Direct Folders

Direct Folders 3.3前前後後我介紹過下列三種快速切換資料夾的工具-FileBox eXtender、Dirkeys、Fast Folders Access:
現在準備在新的Vista上使用另一套新的類似功能的切換資料夾工具:Direct Folders 3.3。Direct Folders不會變更開啟/儲存視窗的外觀,而是雙擊左鈕或按〔Win+Q〕來顯示其視窗,用〔Win+Q〕可以在檔案總管的任何區域使用,但滑鼠雙擊 則只能在檔案名稱區域內才能點擊,若檢視類型使用詳細資料或檔名稍長時,有時雙擊會碰巧按在檔名上,導致開啟了檔案或切換到按到的資料夾裡,造成意料外的 操作,我再配合AutoHotkey來解決這個小困擾。

$MButton::
  IfWinActive,ahk_class CabinetWClass
    Send, #q
  else
   Send,{MButton}
  return

開啟/儲存視窗的視窗類別名稱是CabinetWClass,當作用中的視窗是CabinetWClass類別時將收到的中鈕點擊改送出〔Win+Q〕,因此我們也可以在開啟/儲存視窗的任何位置按滑鼠中鈕來顯示Direct Folders視窗以選擇要切換的資料夾了。

Direct Folders的操作相當簡單,可以依需求自行建立要切換的資料夾,操作細節不再多做說明。付費購買Direct Folders Pro版本則提供有更多功能,我只使用免費的版本,覺得已能滿足我的需求了。

##

Posted by emisjerry at 樂多Roodo!16:15

2008年03月27日

AutoHotkey:在FireFox裡用鍵盤瀏覽網頁

由於先前這篇用AutoHotkey 改造ThinkPad X61按鍵提出了不使用滑鼠而只用鍵盤來瀏覽FireFox網頁的幾個作法,本篇除了再把指令再做調整修正 外,再加上一個配合Super DragAndGo附加元件的按鍵,只要在超連結上按個X鍵,就能將該連結開啟在新分頁。

首先要修改的是增加一個瀏覽按鍵的切換鍵,按第一下讓瀏覽鍵生效,當要在網頁上輸入文字時再按第二次以關閉其功能,如此才能正常輸入,我使用的是〔Z〕 鍵:

; 定義一個共用變數
useBrowseKey = 1

; 切換瀏覽鍵
toggleFirefoxKeys() {
  global useBrowseKey    ;; 用global宣告要使用共用變數useBrowseK
  if (useBrowseKey = 1)
    useBrowseKey = 0
  else
    useBrowseKey = 1
  return
}

; 按〔Z〕切換useBrowseKeys的值
~z::
  toggleFirefoxKeys()
  return

; 修改先前寫好的函數,加入useBrowseKey的判斷
firefox(key) {
  WinGetTitle, sTitle, A   ; 取得作用中視窗的標題
  sProgram := getProgram(sTitle)
  ;MsgBox %sProgram% - %key
  if (sProgram = "FIREFOX") {
    global useBrowseKey
    ;;MouseGetPos, x, y, id, control
    if (useBrowseKey = 1) {
      Send %key%
    }
  }
  return
}

接著,再加上用〔X〕鍵執行Super DragAndGo的操作,也就是按下左鈕不放再往外拖拉:

~x::
  WinGetTitle, sTitle, A   ; 取得作用中視窗的標題
  sProgram := getProgram(sTitle)
  if (sProgram = "FIREFOX") {
    if (useBrowseKey = 1) {
      MouseGetPos, x, y, id, control
      Click down
      MouseMove, x, y-20
      Click up
    }
  }
  return

目前提供的按鍵彙總如下:

按 鍵 功 能說明
b 下 一頁;[PgDn]在鍵盤的右上角很不好按,因此修改成[b]鍵
h 上 一頁,把[h]設成[PgUp]
v 下 一列,把[v]設成[Down]
g 上 一列,把[g]設成[Up]
, 縮 小頁面文字;用逗點的原因是小於也是這個按鍵,較好聯想
. 放 大頁面文字;用逗點的原因是大於也是這個按鍵,較好聯想
x Super DragAndGo,將游標位置的超連結開啟在新分頁
z 切 換上述按鍵是否生效

  • 腳本文字檔下載
  • 腳本執行檔下載,不須安裝AutoHotkey
##

Posted by emisjerry at 樂多Roodo!23:21

2008年03月19日

用AutoHotkey改造特殊按鍵

比較新的鍵盤或筆記型電腦鍵盤上都有有些特殊的按鍵,如果我們想拿這些按鍵來做自行定義的功能時,透過AutoHotkey就能輕鬆達成。首先要先能偵測到這些特殊按鍵的掃描碼(Scan Code)。

  1. 先開啟AutoHotkey視窗,按〔Ctrl+K〕或功能表【View→Key history and script info】以顯示按鍵歷史明細
  2. 按下要偵測的特殊按鍵
  3. 在AutoHotkey視窗按〔F5〕重新整理,找到最後面的按鍵,並注意第二個欄位SC(SC即Scan Code),我筆記型電腦上方的電子郵件按鍵被偵測到的掃描碼是紅框裡的 11E
AutoHotkey Scan Code

找到按鍵的掃描碼,以〔SC掃描碼的3個數字〕格式即為按鍵的名稱,如此就可以添加需要的處理了。以下示範按了這個按鍵後開啟控制台視窗:

;; 按〔Scan Code 11E〕按鍵後執行控制台
SC11E::
  Run control.exe
  return

##

Posted by emisjerry at 樂多Roodo!23:02

用AutoHotkey統一不同項的偵錯功能鍵

筆者經常需要在不同的開發工具間切換,用IntelliJ IDEA寫Java與JSP,網頁除錯則使用Microsoft Script Editor(以下簡稱MSDE),偶爾還用Delphi拉拉視窗表單,人吃五穀雜糧,寫程式沒有都沒Bug的,因此開發工具的偵錯追蹤功能就是我輩的好朋友了。但每個系統用 的功能鍵都不同,在操作時經常會發生按鍵錯亂的狀況,想要把這些功能鍵設定成一致,卻因為是系統鍵而無法設置或因操作繁瑣而放棄。今天突然靈機一動想到可以用AutoHotkey 來試試。

我常用的三個偵錯按鍵如下:
系統工具\偵錯功能 Step into(逐步執行) Step over(不進入函式) Resume Program(開始)
IntelliJ IDEA 按鍵 F7 F8 F9
Microsoft Script Editor 按鍵 F11 F10 F5

因為使用IDEA較頻繁,因此把按鍵統一成〔F7〕、〔F8〕、〔F9〕,基本的操作步驟如下:
  1. 由網頁錯誤處跳入MSDE
  2. 按〔F7〕做逐步執行,AutoHotkey攔截到〔F7〕後自動送出〔F11〕
  3. MSDE接收到〔F11〕,就做了逐步執行的動作了
其實就是對MSDE做鍵盤Remapping處理。因為這個按鍵轉換只針對MSDE,因此先寫一個函數來辨識我們是否在執行MSDE:

; 由標題判斷使用的程式. 傳回"IDEA" 或 "MSDE"
getProgram(sTitle) {
  sProgram := ""
  iPos := InStr(sTitle, "IntelliJ")
  ;MsgBox %iPos%
  if iPos > 0
    sProgram := "IDEA"
  else {
      iPos := InStr(sTitle, "Microsoft Script Editor")
      if iPos > 0
        sProgram := "MSDE"
  }
  return %sProgram%
}

以下就是更換按鍵的指令。程式邏輯簡述如下:
  1. 把目前視窗的標題存入變數sTitle
  2. 以標題為參數叫用getProgram,再把傳回的"IDEA"或"MSDE"存入變數sProgram
  3. 若程式為"MSDE"時則送出〔F11〕按鍵
;; Microsoft Script Editor的Step into用F11, Step over用F10; 將之改成慣用的F7, F8
;; 加~會繼續執行原訂功能
f7::
  WinGetTitle, sTitle, A
  sProgram := getProgram(sTitle)
  ;MsgBox %sProgram%-%sTitle%
  if (sProgram = "MSDE")
    Send {F11}
  return
 
f8::
  WinGetTitle, sTitle, A
  sProgram := getProgram(sTitle)
  ;MsgBox %sProgram%
  if (sProgram = "MSDE")
    Send {F10}
  return

f9::
  WinGetTitle, sTitle, A
  sProgram := getProgram(sTitle)
  ;MsgBox %sProgram%
  if (sProgram = "MSDE")
    Send {F5}
  return

程式很簡單,但解決了長久以來的困擾,而且其他各自不同的按鍵也能透過此種置換方法來達成一致。

AutoHotkey的此種運用算是小兵立大功式的系統增強吧。

##

Posted by emisjerry at 樂多Roodo!20:07

2008年03月17日

如何轉換AutoHotkey的預設分隔字元:冒號

有網友遇到一個問題:如何在AutoHotkey裡把半形冒號(:)轉換成別的符號。這個問題的果難處在於AutoHotkey的熱字串分隔符號恰好是冒號。問題細節如下:

再請教一個小技術問題。因我用的是IBM 5576的古老鍵盤,盤面排列與現今的鍵盤不一樣。我想把盤面符號設成與現今的的鍵盤一致。目前指令都能正常載入,除了這一行,

:::'

也就是說我要把原來打出分號( : )的鍵改成打出單引號( ' ),所以寫出了的指令就變成3個冒號連在一起 :::',而autohotkey對這一行會出現invalid hotkey,不知如何解決?謝謝!

我 捨棄熱字串改用熱鍵,啟動一個AutoHotkey後,雙擊System Tray的H圖示開啟其視窗,由功能表【View→Key history and script info】以顯示按鍵資料,此時在記事本裡按下冒號並觀察AutoHotkey視窗出現的鍵值,若未看到相關按鍵則按〔F5〕重新整理,由下圖中發現冒號 被AutoHotkey解譯成〔RShift(右邊的Shift)+分號〕:

AutoHotkey-Key history

紅框標示的兩個是按下鍵盤(第三欄為 d,表示Key-Down),後續兩個則是放開鍵盤(第三欄是 u,表示Key-Up)。因此用〔Shift+分號〕就能取到冒號鍵了:

;; 熱鍵中的加號代表〔Shift〕,按鍵後面加兩個冒號分隔字元
+;::
  Send '    ;; 按〔Shift+分號〕變成單引號
  return

把這個指令加到腳本檔裡再執行,果然可行。


##

Posted by emisjerry at 樂多Roodo!23:36

2008年03月16日

用AutoHotkey輕鬆製作螢幕小鍵盤

當處於中文輸入法狀態時按〔Ctrl+逗點〕會在螢幕右下角顯示常用符號的小鍵盤,透過這個小鍵盤我們能簡單的輸入符號,若覺得這個小鍵盤提供的符號太少,也可以到PCMan網站下載標點符號輸入程式,尤其標點符號輸入程式彙集許多分門別類的符號,是相當方便的小工具,然而卻無法自訂符號,為了測試與練習AutoHotkey的功能,我利用AutoHotkey的SmartGUI.exe拉了一個Form,加上處理的指令後再用Ahk2Exe.exe產生成執行檔。如果你有在使用AutoHotkey,則本文可視為學習文章,若只想使用則直接下載執行檔即可。

製作操作視窗

1. 首先啟動AutoHotkey安裝資料夾裡的SmartGUI.exe,再於視窗面板上按右鍵選擇「Add Button」以加入一個按鈕。

2. 移動游標將按鈕放好位置後必須再按第二次以決定按鈕大小,此處按鈕是3x3大小。

3. 把滑鼠移到按鈕區域裡,按右鍵可針對此元件做操作,如複製、移動位置、刪除等,在此我們選用【Change Label】以改變按鈕的標題,第一個按鈕的標題是全形逗點。
4. 製造好第一個按鈕後用右鍵功能表裡的【Duplicate Control】複製別的按鈕,重覆此步驟直到你需要的按鈕與符號都放置完畢。

5. 在面板上放置按鈕如下。最後在面板的空白處用【右鍵功能表→Save GUI】,再指定資料夾與檔名my_symbols.ahk後即能儲存起來,後續再編輯此檔案以加入其餘指令。


產生後的my_symbols.ahk內容如下:
; Generated using ~SmartGUI Creator 3.5

Gui, Add, Button, x6 y43 w30 h30,,
Gui, Add, Button, x36 y43 w30 h30,。
Gui, Add, Button, x66 y43 w30 h30,、
Gui, Add, Button, x96 y43 w30 h30,;
Gui, Add, Button, x126 y43 w30 h30,:
Gui, Add, Button, x6 y73 w30 h30,○
Gui, Add, Button, x36 y73 w30 h30,◎
Gui, Add, Button, x66 y73 w30 h30,㊣
Gui, Add, Button, x96 y73 w30 h30,⊙
Gui, Add, Button, x126 y73 w30 h30,ˇ
Gui, Add, Button, x6 y103 w30 h30,☆
Gui, Add, Button, x36 y103 w30 h30,★
Gui, Add, Button, x66 y103 w30 h30,●
Gui, Add, Button, x96 y103 w30 h30,※
Gui, Add, Button, x126 y103 w30 h30, ■
Gui, Show, x390 y148 h184 w219, Generated using SmartGUI Creator 3.5
Return

GuiClose:
ExitApp

指令說明與編修

我們以其中一行指令 Gui, Add, Button, x36 y103 w30 h30,★ 來做說明。AutoHotkey的視窗控制元件是以 Gui, Add 命令加入,第三個參數Button則指定要加入的是按鈕元件,後面再接此元件的X座標、Y座標、寬度與高度,最後一個★則是標題,當我們點擊此按鈕時,其觸發的處理程式名稱為 Button★,以此類推㊣按鍵的處理程式名稱是 Button㊣。我們用以下語法就能加入按鈕的處理程式:
Button★:
Clipboard = ★ ; 把★存入剪貼簿
Send ^v ; 送出〔Ctrl+V〕按鍵,把剪貼簿內容貼上
return
這裡有個視窗焦點的問題要先解決。當my_symbols.ahk執行後,取得焦點的作用中視窗變成是my_symbols.ahk自己,而 要貼上★符號的則是另一個程式(記事本或Word等,在此假我們使用的是記事本),因此我們必須讓焦點切換到記事本好讓★符號貼上,為了讓 my_symbols.ahk能切換回記事本,則啟動時必須先取得記事本的處理ID(Process ID):
  WinGet, k_ID, ID, A   ; 取得作用中視窗的Process ID,存入k_ID變數
再於Button★裡用WinActivate命令把焦點切換回k_ID代表的視窗(即記事本):
Button★:
WinActivate, ahk_id %k_ID% ; 切換焦點回k_ID代表的視窗
Clipboard = ★ ; 把★存入剪貼簿
Send ^v ; 送出〔Ctrl+V〕按鍵,把剪貼簿內容貼上
return
另外,我們可以用下列指令讓my_symbols.ahk視窗一直停駐在螢幕最上方:
  Gui +AlwaysOnTop
my_symbols.ahk視窗的顯示指令如下,將視窗顯示在座標(600, 400)位置處:
Gui, Show, x600 y400 h234 w369, 螢幕中文符號

產生執行檔的方法

如果你有安裝AutoHotkey系統的話,雙擊my_symbols.ahk就能執行並檢視執行結果。接著進入DOS視窗並切換到AutoHotkey安裝資料夾/Compiler資料夾,把my_symbols.ahk複製到此資料夾,並使用Ahk2Exe.exe將my_symbols.ahk轉換成my_symbols.exe,執行my_symbols.exe就不需要安裝AutoHotkey系統能拷貝給朋友了:
Ahk2exe.exe /in "my_symbols.ahk" /icon "任何一個Icon檔.ico"

檔案下載

  • 螢幕中文符號執行檔(不需安裝AutoHotkey系統)
    1. 執行後在System Tray出現【簡】圖示
    2. 在要插入符號的程式裡按〔Win+S〕則顯示螢幕中文符號視窗
    3. 已知問題:切換到別的程式要使用時,必須再啟動螢幕中文符號視窗一次
  • 編修過的AutoHotkey腳本檔壓縮檔
    1. 主腳本:〔Win+S〕設定在此,要更換按鍵須修改此檔
    2. 符號Gui腳本:大部份內容皆由SmartGUI.exe產生
    3. 公用函數腳本:送出符號與括號的函數腳本
##

Posted by emisjerry at 樂多Roodo!18:48

2008年03月9日

[FireFox] 試用FireFox 3 Beta 3

昨天把FireFox 3 Beta 3安裝起來試用,發覺速度確實提升不少,不過必須先解決附加元件的問題。

剛巧看到了這篇使用 Firefox 新版 (地雷版) 時必要的武器,因此安裝了Nightly Tester Tools擴充,以解決大部份的附加元件相容問題。

期待FireFox 3正式版的到來。

##

Posted by emisjerry at 樂多Roodo!22:13

2008年03月1日

AutoHotkey輸出中文的方法

由於AutoHotkey無法直接送出Unicode的中文,以前使用剪貼簿來輸出中文,現在找到直接輸出的新方法了。

方法一:使用剪貼簿的方法

::,tw::
oldClip = %Clipboard% ;; 把目前的剪貼簿內容先存起來
clipboard = 台灣 ;; 把要輸出的文字存入剪貼簿
Send ^v ;; 送出Ctrl+V貼上剪貼簿內容
Clipboard = %oldClip% ;; 再把剪貼簿還原
return

方法二:求出中文字的ASCII碼,直接送出這些碼

  • 本方法來自對岸的高手:在脚本中使用Send发送中文
  • 我們以「中文」兩個字來說明,首先將這兩個字存成一個文字檔,檔名取為test.txt
  • 在DOS視窗下,用 debug test.txt 命令進入除錯模式,減號出現後輸入 d 並按Enter鍵
  • 開頭4個字元就是「中文」二字的ASCII碼,「中」字是A4 A4,「文」字是A4 E5
  • 另外也可以用EmEditor來查閱中文字碼,將游標停在查閱字元前再按〔Ctrl+W〕,EmEditor即顯示該字元的Unicode碼與ASCII碼
  • 16進位的A4A4是10進位的42148,A4E5則是42213,若按Alt+42148則輸出「中」字,Alt+42213則輸出「文」字
  • 因此寫一個函數(_sendRaw)做上述字碼換算,再用Send送出

_sendRaw程式碼

::/zh::
_sendRaw("中文")
return

_SendRaw(Keys)
{
Len := StrLen(Keys) ; 得到字串的長度,注意一個中文字元的長度是2
KeysInUnicode := "" ; 將要發送的字元序列
Char1 := "" ; 暫存字元1
Code1 := 0 ; 字元1的ASCII碼,值介於 0x0-0xFF (即1~255)
Char2 := "" ; 暫存字元2
Index := 1 ; 用於迴圈
Loop
{
Code2 := 0 ; 字元2的ASCII碼
Char1 := SubStr(Keys, Index, 1) ; 第一個字元
Code1 := Asc(Char1) ; 得到其ASCII值
if(Code1 >= 129 And Code1 <= 254 And Index < Len) ; 判斷是否中文字元的第一個字元
{
Char2 := SubStr(Keys, Index+1, 1) ; 第二個字元
Code2 := Asc(Char2) ; 得到其ASCII值
if(Code2 >= 64 And Code2 <= 254) ; 若條件成立則說明是中文字元
{
Code1 <<= 8 ; 第一個字元應放到高8位上
Code1 += Code2 ; 第二個字元放在低8位元上
}
Index++
}
;; MsgBox %Code1%
if(Code1 <= 255) ; 如果此值仍<=255則說明是非中文字元,否則經過上面的處理必然大於255
Code1 := "0" . Code1
;;; KeysInUnicode = "" ;;; 若發現送出的中文變成ASCII數值,把此行開頭的分號刪掉
KeysInUnicode .= "{ASC " . Code1 . "}"
if(Code2 > 0 And Code2 < 64)
{
Code2 := "0" . Code2
KeysInUnicode .= "{ASC " . Code2 . "}"
}
Index++
;;; Send %KeysInUnicode% ;;; 若發現送出的中文變成ASCII數值,把此行開頭的分號刪掉
if(Index > Len)
Break
}
Send % KeysInUnicode ;;; 若發現送出的中文變成ASCII數值,把此行開頭加上分號
Return ""
} ;; _sendRaw

測試

輸入 /zh 則輸出 中文 二字。
下載測試.ahk檔案:zh.ahk

備註

若有發現最後輸出的是類似 中42213 的文字,可能是輸出速度過快造成問題,可試著把Send指令移到迴圈裡,請看3個分號處的說明。

##

Posted by emisjerry at 樂多Roodo!22:16

2008年02月15日

用Startup Delayer加速Windows的開機速度

Windows用得越久、應用程式安裝得越多,開機速度順理成章地(?!)越來越慢;大部份的調校軟體用了許多調整的方法,但經常是成效有限。沒想到Startup Delayer另闢蹊徑,用了很簡單的方法來有效提昇開機速度:延後執行部份啟動程式,讓開機時的程式載入時間縮短,這樣就能縮短開機時間了。

安 裝後第一次執行時啟動程式會被加到清單裡,只要把要延後載入的程式拖放到下方的時間帶即可,再拉動時間帶裡的方棒就能變更延後執行的時間。而自行新增到啟 動資料夾裡的程式並不會被自動安裝,我們必須自行由啟動資料夾裡刪掉,再新增到Startup Delayer的清單裡,若想讓延後執行程式不要顯示出來,則可以把Launch Type改成Minimized。

另 外,再把延後執行程式的Startup on Windows start之類的勾選取消掉,以免又被Windows載入了。程式都設定好後,務必按倒三角的紅色按鈕以啟動Startup Delayer,這樣下次重新開機時就能看到Startup Delayer發揮功效了,我個人覺得速度提昇不少唷。

##

Posted by emisjerry at 樂多Roodo!0:49
 [第一頁]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]  [11]  [下10頁]  [最終頁]