はじめに
この記事では、AutoHotkey v2 で hotstring を利用して、今日の日付を「年月日+曜日」の形式で素早く入力するプログラムを学習します。
エディタで今日の日付を手動で入力するとき、カレンダーを確認せずに素早く入力できるようになります。
AutoHotkey v1.1 利用者が詰まる要所
v2 では後方互換性は犠牲となっており、v1.1 のために書かれたスクリプトは基本的に動作せず、改修の必要があります。
必要な前提知識
AutoHotkey v2 は Windows で動作する、自動化に役立つツールです。
インストール
AutoHotkey
AutoHotkey をダウンロードします。このプログラムは v2.0 で書かれているので、ダウンロードページで「Download v2.0」の方をダウンロードし、動作させる Windows 機にインストールします。
AutoHotkey Plus Plus
VSCode をご利用の方は、「AutoHotkey Plus Plus」をインストールしましょう。コーディングが快適になります。
コマンド
AHK++を使用すると、キーボードショートカットを使用してスクリプトをコンパイル、デバッグ、および実行できます。選択範囲をスタンドアロン スクリプトとして実行することもできます。
- デバッグ:Ctrl + Alt + F9
- ヘルプを開く:Ctrl + F1
- 実行:Ctrl + F9
- 選択範囲の実行:Ctrl + F8
手順
実装する内容
「w[[」と順番に入力すると、例として「2023 年 10 月 4 日(水)」と入力されるようにします。
コード
;w[[ → 年月日+曜日を入力する Hotstring 本体
::w[[::
{
TimeString := FormatTime(,"LongDate")
downum := FormatTime(,"WDay")
dowstr := get_dowstr(downum)
A_Clipboard := TimeString . dowstr
Send "+{INSERT}"
}
;曜日をカッコつきで返す関数
get_dowstr(theNum)
{
dowtable := "日月火水木金土"
; Wday は日曜日が 1、
dowstr := SubStr(dowtable, theNum, 1)
return "(" . dowstr . ")"
}
::w[[::
{コード}
- Hotstring は、連続して入力する文字を、「::」で囲います。実行する内容が複数行にわたる場合、中括弧{} で囲います。これがないと、「Error: Hotkey or hotstring is missing its opening brace.」が表示されます。
TimeString := FormatTime(,"LongDate")
- 変数「TimeString」に、今日の日付を"LongDate"のオプションを使って"yyyy 年 MM 月 dd 日"の形式で代入します。
downum := FormatTime(,"WDay")
- 変数「downum」に、今日の曜日を代入します。形式は 1 ~ 7 で、1 が「日曜日」、数字が上がるごとに火水木と続いて 7 が「土曜日」になります。
dowstr := get_dowstr(downum)
- 変数「dowstr」に、get_dowstr() 関数を使って引数の「downum」で曜日を指定し、「(曜日)」の形式で曜日を取得します。
A_Clipboard := TimeString . dowstr
Send "+{INSERT}"
- クリップボードに「年月日+曜日」を代入して、「(クリップボードを)貼り付け」を実行します。
get_dowstr(theNum){}
- 曜日を WDay の形式で受け取り、「(曜日)」の形式で曜日を返す関数です。
dowtable := "日月火水木金土"
dowstr := SubStr(dowtable, theNum, 1)
- 変数「dowtable」に、日本語の曜日を日曜日から一文字ずつ並べて代入します。
- 変数「dowstr」に、指定された曜日を日本語で代入します。SubStr() は指定された文字列から、開始位置「theNum」を 1 文字だけ抜き取って値を返します。
return "(" . dowstr . ")"
- 指定された曜日を日本語化して、小カッコでくくったものを返します。
注意点
- 曜日の取得に
FormatTime(,"ddd")
を使えば曜日を数値ではなく単語で取得できるので、コードをもっと短く記述できます。ただし、オプション「ddd」は、利用しているパソコンの言語設定に依存するため、例えば英語を選択している場合は英語の曜日が出力されるので結果が変わってしまいます。 - 自作関数は「get_dowstr(theNum){}」のように、実行内容を中カッコでくくります。
結論
- この Hotstring を使えば、今日の年月日を知らなくても、「w[[」と入力することで今日を指す年月日+曜日を入力することができます。
- AutoHotkey をインストールした後に付属する「Ahk2Exe」を使えば、AutoHotkey のプログラムを.exe 化できます。それを利用すれば、AutoHotkey をインストールしていない Windows 機でも hotstring が使えるようになります。
- また、作成した.exe ファイルを「Windows 10 の起動時に自動的に実行するアプリ」として登録しておけば、起動時に自動的に立ち上がり、hotstring が利用可能になります。