(今日の独り言)(AutoHotkey)(API関数も使える? 編)

 まぁ ちょっと 癖がありますけど 慣れれば 違和感は無いですね
VisualBasicHSP とかで API関数を呼び出せるスキルがあるなら AutoHotkeyでも出来るでしょう
VBHSP の 定義を参考にして 読み替えていけば 何とかなるでしょうし
今回のサンプルは、 左Ctrl + 左Alt + X で 「『コンピュータの電源を切る』ダイアログ」を表示するです

[]<^<!X::[]
[]	hSellTrayWnd := DllCall("user32.dll\FindWindowA", "Str", "shell_traywnd")[]
[]	DllCall("user32.dll\SendMessageA", "Int", hSellTrayWnd, "Int", 0x111, "Int", 0x1FA)[]
[]return[]
 要点を箇条書きにすると

AutoHotkey:= が 代入演算子になります
AutoHotkeyAPI関数呼び出しは DllCall関数を使います
・ DllCall関数の戻り値は API関数の戻り値になります
・ 戻り値を代入する必要が無かったら 代入式にする必要はありません
・ 変数の値を参照するときでも %%でくくらずに そのまま 変数名でいい
・ DllCall関数の書式 第1引数 は ""
・ DllCall関数の書式 第2引数 は API関数へ渡す 第1引数の データ型
・ DllCall関数の書式 第3引数 は API関数へ渡す 第1引数の データ
・ DllCall関数の書式 第4引数 は API関数へ渡す 第2引数の データ型
・ DllCall関数の書式 第5引数 は API関数へ渡す 第2引数の データ
・ DllCall関数の書式 第6引数以降も 必要な分だけ上の繰り返し

具体的に 内容を説明すると タスクバーのウインドウハンドルを取得して
タスクバーに対して 「『コンピュータの電源を切る』ダイアログを表示しなさい」という メッセージを送信する
といった感じですね

 上の サンプルでは ハンドルの値を一旦 変数に代入してますが
一度しか参照しない場合は DllCall関数内で DllCall関数を呼び出しても大丈夫です
[]<^<!X::[]
[]	DllCall("user32.dll\SendMessageA", "Int", DllCall("user32.dll\FindWindowA", "Str", "shell_traywnd"), "Int", 0x111, "Int", 0x1FA)[]
[]return[]