開發環境
主程式
- 官方版autohotkey
- Autohotkey_L:根據官方版加入更多功能,例如unicode支援、64位元支援、物件導向,而且有提供簡體中文的說明檔!
- 以上都有提供portable版本,免安裝,解壓縮後就可以直接用
- ahk_l portable:這是原PO用的
Script File
- 只有主程式沒用,還需要script才能做事,script的副檔名是ahk,但本質上就是文字檔,可以用任何文字編輯軟體打開撰打
- 同樣是文字檔會有不同的編碼方式,原PO儲存時都使用UTF-8 (with BOM),對於中文字或是其實特殊文字比較不會變亂碼
編輯器
- 工欲善其事,必先利其器,好的編輯器可以讓寫程式更有效率,包括偵測錯誤、函數提示、顏色標示
- 原PO使用的是SciTE4Autohotkey,一樣有分安裝版和portable版
寫程式
前言
- 所有程式都能做很簡單或是很複雜的事,autohotkey也是,尤其autohotkey特別針對日常使用電腦需要用到的功能,寫起來非常有效率,用最少的程式碼做最多的事
- 本篇主要介紹血汗國家(地區?)的放射科醫師,靠著autohotkey在夾縫中求生存的一段故事
模擬鍵盤、滑鼠
- 基本上打報告的所有動作,包括鍵盤上任何按鍵、滑鼠上任何按鍵和動作,都是可以模擬出來的,所以寫程式的第一步是思考、設計,「我要我的程式做什麼事情」,而且要step by step,分析每一個步驟
- 官方詳細說明
- 送出一個按鍵,例如:send blabla
- 英文字母、數字、特殊符號可以直接送出,例如:send abc123&*?
- 例外的是 ` ,要在字元前加一個`,也就是 send ``
- ! # + ^ { } ,這些字元有特殊用途,要用大括號包圍起來,表示送出原本的字元而不是特殊用途,例如 send {!}{#}
- 功能鍵(會自動和右邊一個按鍵變組合鍵)
- ^ 表示ctrl,例如 send ^c 就是按 ctrl + c
- ! 表示alt,例如 send !{F4} 就是按 alt + F4
- + 表示shift,例如 send ^+{esc} 就是按 ctrl + shift + esc
- # 表示視窗鍵(ctrl和alt中間那個),例如 send #e 就是按 win + e
- 特殊字元
- 以 { 和 } 包圍起來,族繁不及備載,可參考說明檔,大部分都很直覺,常用如下
- {enter} {space} {tab}
- {backspace} 或 {bs}、{delete} 或 {del}
- {up} {down} {left} {right} {home} {end} {pgup} {pgdn}
- {F1} ~ {F12}
- 在數字盤的按鍵都是這個形式:{Numpad___}
- 滑鼠按鍵
- {LButton} {RButton} {MButton}
- {WheelUp} {WheelDown}:滾輪
- 重複同一個按鍵:send {space 10}會送出10個空白鍵
Hotstring & Hotkey & Settings
::cct::CT of the chest without and with contrast enhancement is read and compared with prior study dated . This CT study shows:{left 22}
- 送出了這段文字,通常會將游標移到前面填入日期,所以在後面加上{left 22},將游標往左移動22次
- 或者可以用^{left 5},因為 ctrl + left 會往左移動一個「字」而不是「字元」,但使用後的效果不如前一個方法精準
- 將send mode改成input模式,比較不會發生打報告打太快時,autohotkey送出的模擬按鍵和自己實際按的按鍵交錯送出
- 打報告時還是常需要google查資料(&上facebook?),這時可以用suspend指令將這個script的所有hotstring和hotkey停用,繼續打報告時再按同一個快速鍵(也只有這個快速鍵不會被停用)回復
- 如果script在執行中,修改程式碼後要重新執行,可以直接用reload指令
inputbox,addahk
if addahk!=
fileappend,% addahk,% A_ScriptFullPath
reload
return
- 跳出一個輸入框,輸入的文字(例如新的hotstring)會加到原本的script最底下,然後reload整個script,就能使用剛加入的hotstring
- exitapp指令可以離開整個script
~+NumpadEnter::
send -{space}
return
- bullet是項目符號,每個人用的都不一樣,原PO是用「- 」,設定快速鍵後按 ctrl + enter 可以跳到下一行並輸出項目符號
Dynamic Hotstring
- 進階版的hotstring,見AHK論壇
- 原始的hotstring是一對一的關係,打出一些特定的字跳出一些特定的字,dynamic hotstring則是多對多的,打出某些pattern的字跳出某些pattern的字
- 常見在一些列舉項目,例如left/right/bilateral、head/neck/chest/abdomen/pelvis,或是需要輸入某些數字,例如SE3 IM20,都適合用dynamic hotstring,舉一個例子…
hotstring("([.\W])?(\d+)\.\.(\d+)(\W)","specifyImage",3)
return
specifyImage:
if $.value(1)="."
send % "(SE" $.value(2) " IM" $.value(3) ")" $.value(4)
else
send % $.value(1) "SE" $.value(2) " IM" $.value(3) $.value(4)
return
- 下載Hotstring.ahk後放到自己的script的資料夾;自己的script(通常在最前面)要有一行#include hotstring.ahk載入函數
- hotstring("([.\W])?(\d+)..(\d+)(\W)","specifyImage",3)要放在「第一個return」之前,因為return之後的程式碼不會被直接執行
- ([.\W])?(\d+)..(\d+)(\W)表示要trigger的pattern
- specifyImage表示trigger後要執行的段落標籤
- 3表示pattern是用regular expression
- 總之最後的效果是
- 輸入 .3..20 ,輸出 (SE3 IM20)
- 輸入 3..20 ,輸出 SE3 IM20