mcpField
A
autohotkey-v2-gui

autohotkey-v2-gui

github.com/sarfraznawaz2005開発1111 回インストール20 週間前に更新
リポジトリ

autohotkey-v2-gui について

AutoHotkey v2 の GUI 開発向けスキルです。複雑な画面、イベント処理、性能最適化のパターンを扱い、複数のコントロールを使うアプリの構築に役立ちます。

主な機能

  1. 01OnEvent によるイベント処理
  2. 02Submit() によるフォームデータ取得
  3. 03コントロールの表示と配置管理
  4. 04ListView と Tab の画面構築
  5. 05メモリとオブジェクト容量の調整

活用シーン

  1. 01複数コントロールの GUI アプリ作成
  2. 02イベント駆動型インターフェースの実装
  3. 03GUI の性能とメモリの最適化
  4. 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 オプションを使用してください

コメント