autohotkey-v2-gui について
AutoHotkey v2 の GUI 開発向けスキルです。複雑な画面、イベント処理、性能最適化のパターンを扱い、複数のコントロールを使うアプリの構築に役立ちます。
主な機能
- 01OnEvent によるイベント処理
- 02Submit() によるフォームデータ取得
- 03コントロールの表示と配置管理
- 04ListView と Tab の画面構築
- 05メモリとオブジェクト容量の調整
活用シーン
- 01複数コントロールの GUI アプリ作成
- 02イベント駆動型インターフェースの実装
- 03GUI の性能とメモリの最適化
- 04検証付き ComboBox の構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sarfraznawaz2005/ agent-skills-collection --skill autohotkey-v2-guiインストール後、Claude Code で/autohotkey-v2-guiを入力して読み込まれたか確認します。
詳細
AutoHotkey v2 GUI アプリケーション
AutoHotkey v2 における高度な GUI 開発パターンと最適化技術です。
適用する状況
- 複数のコントロールを備えた複雑な GUI アプリケーションを構築する場合
- イベント駆動型のユーザーインターフェースを実装する場合
- GUI のパフォーマンスとメモリ使用量を最適化する場合
- ListView、ComboBox、Tab などの高度なコントロールを扱う場合
重要なルール
イベント処理:g ラベルではなく、OnEvent メソッドを使用してください
; WRONG - v1 g-label syntax
MyGui.Add("Button", "gButtonClick", "OK")
; RIGHT - v2 OnEvent method
Btn := MyGui.Add("Button", "w80", "OK")
Btn.OnEvent("Click", ButtonClick)
データ送信:変数名を指定して Submit() メソッドを使用してください
; WRONG - accessing controls directly
EditText := MyGui["MyEdit"].Text
; RIGHT - Submit returns object with named values
MyGui.Add("Edit", "vUserName")
Data := MyGui.Submit()
UserName := Data.UserName
コントロールの表示状態:Show/Hide コマンドではなく、Visible プロパティを使用してください
; WRONG - v1 command syntax
GuiControl, Hide, MyButton
; RIGHT - v2 property syntax
MyButton.Visible := false
主なパターン
基本的な GUI 構造
MyGui := Gui("+Resize", "Application Title")
MyGui.OnEvent("Close", AppClose)
; Add controls with variables for data retrieval
NameEdit := MyGui.Add("Edit", "vUserName w200")
SubmitBtn := MyGui.Add("Button", "Default w80", "OK")
SubmitBtn.OnEvent("Click", ProcessForm)
MyGui.Show("w300 h150")
ProcessForm(*) {
Data := MyGui.Submit()
MsgBox("Hello " . Data.UserName)
}
AppClose(*) {
ExitApp
}
イベント処理を備えた ListView
MyGui := Gui()
LV := MyGui.Add("ListView", "r20 w700", ["Name", "Size (KB)"])
LV.OnEvent("DoubleClick", LV_DoubleClick)
; Populate ListView
Loop Files, A_MyDocuments "\*.*"
LV.Add(, A_LoopFileName, A_LoopFileSizeKB)
LV.ModifyCol() ; Auto-size columns
LV.ModifyCol(2, "Integer") ; Enable numeric sorting
LV_DoubleClick(LV, RowNumber) {
RowText := LV.GetText(RowNumber)
MsgBox("Selected: " . RowText)
}
整理されたレイアウトの Tab コントロール
MyGui := Gui()
Tab := MyGui.Add("Tab3",, ["Settings", "Data", "Output"])
; First tab controls
MyGui.Add("CheckBox", "vAutoStart", "Start automatically")
MyGui.Add("ComboBox", "vTheme", ["Light", "Dark", "Auto"])
; Second tab controls
Tab.UseTab(2)
MyGui.Add("Edit", "vDataPath w200")
MyGui.Add("Button", "x+10 yp", "Browse...")
; Third tab controls
Tab.UseTab(3)
MyGui.Add("Edit", "vOutput r10 w300")
Tab.UseTab() ; End tab association
MyGui.Add("Button", "Default", "Apply")
モーダルダイアログのパターン
MainGui := Gui("+Resize", "Main Window")
MainGui.Opt("+OwnDialogs") ; Make dialogs modal
ShowSettingsBtn := MainGui.Add("Button", "w100", "Settings")
ShowSettingsBtn.OnEvent("Click", ShowSettings)
ShowSettings(*) {
; Modal dialogs prevent interaction with main window
Result := MsgBox("Save current settings?", "Confirm", "YesNoCancel")
if (Result = "Yes") {
; Save logic here
}
}
パフォーマンスの最適化
大量のデータに対するメモリ管理
; Pre-allocate string capacity for concatenation
VarSetStrCapacity(&LargeString, 5120000) ; ~10 MB
Loop Files, "C:\*.*", "R"
LargeString .= A_LoopFileFullPath . "`n"
; Free memory when done
LargeString := ""
オブジェクト容量の調整
; Pre-allocate array/map capacity for performance
DataArray := []
DataArray.Capacity := 1000 ; Avoid frequent reallocation
DataMap := Map()
DataMap.Capacity := 500
高度なコントロールのパターン
検証機能付き ComboBox
ColorBox := MyGui.Add("ComboBox", "vColor", ["Red", "Green", "Blue"])
ColorBox.OnEvent("Change", ValidateColor)
ValidateColor(Ctrl, *) {
if (Ctrl.Text = "Red")
MsgBox("Warning: Red selected!")
}
動的なコントロール管理
; Get control position for dynamic layouts
MyEdit.GetPos(&x, &y, &w, &h)
NewBtn := MyGui.Add("Button", "x" . (x + w + 10) . " y" . y, "Next")
; Retrieve control values without Submit
CurrentText := ControlGetText("Edit1", MyGui.Hwnd)
よくある間違い
- 変数名の指定漏れ:Submit() で値を取得するには、コントロール名に「v」プレフィックスが必要です
- 不適切な配置:余白に戻すには「xm ym」、相対位置に配置するには「x+m y+m」を使用してください
- イベントハンドラーのパラメーター:最新のイベントハンドラーが受け取るパラメーターは(Ctrl、Info)であり、(*)だけではありません
- ウィンドウのアクティブ化のタイミング:背面のウィンドウを表示するときは、フォーカスを奪わないよう NoActivate オプションを使用してください
コメント
Markdown 対応