Quantcast
Channel: 簡睿隨筆
Viewing all articles
Browse latest Browse all 897

AHK63|AutoHotkey V2 語言概述#1-字串、熱字串與變數

$
0
0

gh|700

先介紹AutoHotkey v2語言的基本組成:

  • v1是命令式的語法,v2則是表達式的語言,基本上使用函數調用的方法運行;函數調用時可省略括號
  • 關鍵字大小寫不區分。檔案編碼建議使用 UTF-8帶BOM
  • v1寫法:

    ; MsgBox, Text
    ; MsgBox [, Options, Title, Text, Timeout]
    MsgBox, 64, Message title, Hello!,  ;; v1. 64=Information icon
    • v2寫法:
      ; MsgBox [Text, Title, Options]
      ; Result := MsgBox([Text, Title, Options])
      MsgBox "Hello!",,64
      MsgBox("Hello!",,64)

[!COMMENT]+ 建議
盡量使用函數式的寫法

1. 註解

  • 行內註解用分號,左邊至少一個空白(在行首則不用空白)
  • 多行註解用單行 /**/ 夾住的區塊

2. 字串與變數

2.1. 字串

  • 字串用雙引號單引號夾住
  • 字串裡有雙引號則外層使用單引號,字串裡有單引號則外層使用雙引號
    • 也可使用跳脫字元(Escape sequence):倒引號 (`)
  • 特殊字元
    • `t: Tab字元
    • `n: Linefeed字元 (new line)
    • `r: Carriage return字元
    • `f: Formfeed字元
    • `{: 大括號字元
  • 字串連接用空白或 . (半形的點)
sToday := A_YYYY . "年" . A_MM . "月" . A_DD "日"
MsgBox("今天是 " sToday "`n時間:" A_Hour "時" A_Min "分" A_Sec "秒")

sMsg := Format("今天是 {1}年{2}月{3}日`n時間:{4}時{5}分{6}秒", A_YYYY, A_MM, A_DD, A_Hour, A_Min, A_Sec)
MsgBox(sMsg)
  • 上述程式碼中的 sToday 是變數,用來存放指派給它的特定資料
  • := 是指派、賦值的運算子。x := y 運算式將變數 y 的值賦予給變數 x
  • 拚接字串與變數可使用Format()

2.2. 多行字串

sFormat := "
(
今天是 {1}年{2}月{3}日
時間:{4}時{5}分{6}秒
)"

MsgBox "多行字串範例`n" . Format(sFormat, A_YYYY, A_MM, A_DD, A_Hour, A_Min, A_Sec)

2.3. 變數

  • AutoHotkey的名稱(包含變數名稱、函數名稱等)不區分大小寫,最長253個字元
  • 名稱可使用任意的文字、數字、底線(Underscore),且不能以數字開頭
  • 變數沒有型別,因此一個變數的值可以是字串或數值,可以任意指派各種類型的值給變數
  • 保留字不能用做名稱(例如 if、while等)
  • 內建變數以 A_開頭,如A_YYYY、A_MM、A_DD等

[!TIP]+ 匈牙利命名法 (Hungarian notation)
AutoHotkey的變數沒有型別,為方便區分變數存放的資料類型,建議使用匈牙利命名法來命名變數,以開頭的幾個小寫字母當做變數的型別

例如:字串變數以 s 開頭,表示String,整數變數以 i 開頭,表示Integer,...

3. 熱字串 (Hotstring)

  • 熱字串用來輸入後擴展成指派內容的表示式

[!REF]+ 熱字串簡單格式
::熱字串::擴展後內容 [觸發字元]
觸發字元預設是空白Tab Enter

::ma::mymail@gmail.com
::,ma::mymail@gmail.com  ; 逗點被保留了, why?
::,m1::mymail@gmail.com
::,ah::AutoHotkey

[!TIP]+ 技巧

  • 熱字串以特殊符號開頭以確保不會與常用文字結合而錯誤擴展
  • 例如熱字串為 ma 時,輸入mail時可能會被擴展
  • 選用方便輸入的特殊符號,例如 ,;/

3.1. 選項

[!REF]+ 熱字串選項
:選項:熱字串::擴展後內容 [觸發字元]

sFormat := "{1}年{2}月{3}日 {4}時{5}分{6}秒"
:X:,da::MsgBox Format(sFormat, A_YYYY, A_MM, A_DD, A_Hour, A_Min, A_Sec)
:X:,da2::Send Format(sFormat, A_YYYY, A_MM, A_DD, A_Hour, A_Min, A_Sec)
:O:,m2::mymail@gmail.com
  • 選項X:執行擴展文字
  • 選項O:Omit,省略輸出觸發字元

3.2. 練習

  • 建立一個新的腳本檔 ahk63.ahk2
    • 添加熱字串 ,addr 輸出家裡或公司地址
    • 添加熱字串 ,dd 輸出今天的簡短日期(有分隔線),,tt輸出當前的簡短時間(有分隔線)
    • 添加熱字串 ,d 輸出今天的簡短日期(無分隔線),,t輸出當前的簡短時間(無分隔字元)

4. 💡 相關鏈接

✅ VS Code下載:https://code.visualstudio.com/download
✅ AutoHotkey下載:https://www.autohotkey.com/download/
✅ VSCode擴充 Action Buttons Ext: https://marketplace.visualstudio.com/items?itemName=jkearins.action-buttons-ext
✅ Easy-Auto-GUI-for-AHK-v2: https://github.com/samfisherirl/Easy-Auto-GUI-for-AHK-v2
✅ 如果你覺得我的VS Code樣式有點吸睛的話,請參考我的影片:Peacock:五彩繽紛的vs-code擴充

5. 教學影片

https://youtu.be/0MlaHrC0_QU

##

您可能也會有興趣的類似文章


Viewing all articles
Browse latest Browse all 897

Trending Articles