前回、今日の年月日をHotstring で素早く入力する方法を実装した。今度は、指定日の年月日を素早く入力する方法を実装する。Excel のセルに「月/日」を入力すると暦と認識される機能の応用だ。
方法
AutoHotKey のHotstring を使う
Hotstring とは
ユーザーが特定の文字列をタイプしたときに、アクションを発生させられる機能
スクリプト
my_hotstring.ahk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;今年の指定日の日付を入力する ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;t[[ → 年月日+曜日を入力する Hotstring 本体 ::t[[:: ; 入力フォーム作成 Gui,Add,Text, yp+10,指定日[4ケタ] Gui,Add,Edit,x100 yp-4 vTargetDate w50 Limit4 Number ; 入力フォーム、4ケタ、数字のみの制限 Gui,Add,Button,gInsDateExec x170 yp-2 default,&OK ; オプションで default を指定すると、Enter が押されたときにそのボタンのラベルが処理されます Gui,Show return InsDateExec: Gui,Submit Gui,Destroy ;今年の年を取得 FormatTime, YearString,, ShortDate StringMid,YearString,YearString,1,4 ; 年を取得 ;取得した月日のテキストから曜日を取得 FormatTime, dayString,%YearString%%TargetDate%000000,WDay ;取得したテキストから年月日を取得 FormatTime, targetString,%YearString%%TargetDate%000000,LongDate ;曜日を(月)の形式に変換 dowstr := get_dowstr(dayString) clipboard = %targetString% %dowstr% Send, +{INSERT} Return ;入力フォームキャンセルで、Gui を破棄 ;キャンセル、エスケープキー、閉じるに対応 ButtonCancel: GuiEscape: GuiClose: Gui,Destroy Return ;曜日をカッコつきで返す get_dowstr(theNum) { ;##### 引数が正しく引き渡されていない dowtable := "日月火水木金土" ; Wday は日曜日が 1、 ; StringMid のStartChar は、取り出す部分の開始位置。StringGetPosと違い、1文字目が 1。 dowstr := "" StringMid, dowstr, dowtable, %theNum%, 1 return "(" dowstr ")" } |
使い方
普段使いするなら、このmy_hotstring.ahk をランチャーに入れて実行するか、Windows のスタートアップで起動時に実行されるようにする
“t[[” と入力すると、指定日入力フォームが表示される
指定日を半角英数4ケタ”0101″ のように入力してエンターキーを押すと、”2020年1月1日 (水)” のように出力される
解説
- 入力フォーム作成に、Gui,Add,Edit を使っている
- フォームに入力した内容は、TargetDate に代入される
- Gui,Add,Button で処理が実行されたらInsDateExec 関数を実行する
- 今年の西暦年をYearString に取得
- 入力された日付とYearString を使って、指定日の曜日を取得
- 入力された日付とYearString を使って、年月日を取得
- 指定日の曜日を、get_dowstr() を使って、「(月)」の形式に変換
参考
AutoHotkey の Hotstring で曜日文字列を素早く入力する
http://stakiran.hatenablog.com/entry/2018/01/19/221444