GUI

ここではAutoHotKeyから、ダイアログなどのGUIを作成する方法について解説しています。他のアプリケーションのGUIの状態を取得したり制御する方法は、ウィンドウ操作のコマンドにあります。

関連するコマンド

  • FileSelectFile
  • FileSelectFolder
  • Gui
  • GuiControl
  • GuiControlGet
  • IfMsgBox
  • InputBox
  • Menu
  • MsgBox
  • OnMessage
  • Progress
  • SplashImage
  • SplashTextOn / SplashTextOff
  • ToolTip
  • TrayTip

MsgBox

ダイアログを表示できます。


パラメータ未指定時の、既定のMsgBox

ユーザーの確認が不要ならば、バルーンチップを用います。

MsgBox, Text
MsgBox [, Options, Title, Text, Timeout]
MsgBox
パラメータ 説明 既定値
Text メッセージボックスのテキスト "Press OK to continue."
Options メッセージボックスの種類 0
Title メッセージボックスのタイトル スクリプト名
Timeout メッセージボックスが自動で閉じるまでの秒数  

v1.1.06以降では「% 」を指定することで、OptionsとTimeoutを式と認識させられます。1.1.06.00 - Changes & New Features | AutoHotkey

v1.1.21以降では「% 」を指定することで、OptionsとTimeout以外のパラメータも式と認識させられます。1.1.21.00 - Changes & New Features | AutoHotkey

MsgBox, % 2+3 ; "5" と出力
MsgBox, 2+3   ; "2+3" と出力

Options

Optionsで、メッセージボックスの種類を指定できます。

種類は定められて数値で指定します。たとえば[OK]と[Cancel]ボタン、それに警告アイコンを表示するには下表より、

  • [OK/Cancel] … 0x1
  • [Icon Exclamation] … 0x30

であるから、これらの論理和をとり0x31とします。Optionsはリテラルでなければならないため、0x1 | 0x30のようには指定できません。

ボタン
機能 10進数 16進数

OK (that is, only an OK button is displayed)
0 0x0

OK/Cancel
1 0x1

Abort/Retry/Ignore
2 0x2

Yes/No/Cancel
3 0x3

Yes/No
4 0x4

Retry/Cancel
5 0x5

Cancel/Try Again/Continue (2000/XP+)
6 0x6

Adds a Help button (see remarks below)
16384 0x4000
アイコン
機能 10進数 16進数

Icon Hand (stop/error)
16 0x10

Icon Question
32 0x20

Icon Exclamation
48 0x30

Icon Asterisk (info)
64 0x40
デフォルト ボタン
機能 10進数 16進数
Makes the 2nd button the default 256 0x100
Makes the 3rd button the default 512 0x200
機能 10進数 16進数

System Modal (always on top)
4096 0x1000

Task Modal
8192 0x2000
Always-on-top (style WS_EX_TOPMOST)
(System Modalから、タイトルバーのアイコンを除外したもの)
262144 0x40000
機能 10進数 16進数
Make the text right-justified 524288 0x80000
Right-to-left reading order for Hebrew/Arabic 1048576 0x100000

表示位置の変更

既定ではプライマリモニタの中央に表示され、これを変更する手段は提供されていません。よってその必要があるならば、SetTimerを利用し別スレッドからWinMoveで移動させます。How Do I Define the Position of a MsgBox on Screen? - Ask for Help - AutoHotkey Community

A::
    SetTimer, WinMoveMsgBox, 100
    MsgBox, TEST
return

WinMoveMsgBox:
    SetTimer, WinMoveMsgBox, Off
    WinMove, A, , 100, 200
return

IfMsgBox

直近のMsgBoxで、ユーザーによって押されたボタンを調べられます。

IfMsgBox, ButtonName
IfMsgBox

ButtonNameには、ボタン名を文字列で指定します。

  • Yes
  • No
  • OK
  • Cancel
  • Abort
  • Ignore
  • Retry
  • Continue [v1.0.44.08+]
  • TryAgain [v1.0.44.08+]
  • Timeout (タイムアウトした場合)
MsgBox, 0x41, ,よろしいですか?
IfMsgBox, OK
{
    ;
}

ToolTip

スクリーンの任意の位置に、つねに前面に表示されるウィンドウ (ツールチップ) を作成できます。

ToolTip [, Text, X, Y, WhichToolTip]
ToolTip

XYで指定する位置は、既定ではアクティブ ウィンドを基準とした座標となります。これを省略すると、マウスポインタの近くに表示されます。

WhichToolTipは、複数のツールチップを表示するときに、それらを区別するために用います。既定値は1で、1~20の値を指定できます。

ツールチップは、以下のいずれかの条件を満たすまで表示され続けます。

  • スクリプトが終了する
  • 空文字列のテキストで、再びToolTipコマンドが実行される
  • ツールチップがユーザーによってクリックされる (OSによっては機能しない)

たとえば、

ToolTip, Multiline`nTooltip

とすると、次のように表示されます。

Menu

トレイのメニューを操作できます。

Menu, MenuName, Cmd [, P3, P4, P5]
Menu

操作の種類

Cmdの値によって、P3P4P5のパラメータの意味が決定されます。

メニュー項目
Cmd P3,P4,P5 操作
Add [, MenuItemName, Label-or-Submenu, Pn] メニュー項目を追加する
Delete [, MenuItemName] 項目を削除する。ただし標準のメニューは削除できない
DeleteAll   すべてのカスタムメニューを削除する
Rename , MenuItemName [, NewName]  
Check , MenuItemName メニュー項目にチェックマークを付ける
Uncheck , MenuItemName メニュー項目からチェックマークを外す
ToggleCheck , MenuItemName メニュー項目にチェックマークがなければ付け、あれば外す
Enable , MenuItemName  
Disable , MenuItemName  
ToggleEnable , MenuItemName  
Default [, MenuItemName] トレイのアイコンをダブルクリックしたときに実行する項目の指定
NoDefault   Defaultの指定を無効にする
Standard   標準のメニューが存在しなければ、それを末尾に挿入する
NoStandard   標準のメニューを除去する
メニュー項目のアイコン
Cmd P3,P4,P5 操作
Icon , MenuItemName, FileName [, IconNumber, IconWidth] メニュー項目のアイコンの指定
NoIcon , MenuItemName  
トレイのアイコンとツールチップ
Cmd P3,P4,P5
Icon [, FileName, IconNumber, 1]
Icon  
NoIcon  
Tip [, Text]
その他
Cmd P3,P4,P5
Show [, X, Y]
Color , ColorValue [, Single]
Click , ClickCount
MainWindow  
NoMainWindow  
UseErrorLevel [, off]

項目の追加 (Add)

CmdパラメータをAddとします。

Menu, MenuName, Add [, MenuItemName, Label-or-Submenu, Pn]

パラメータのPnでは、メニューのスレッド優先度を指定します。それはP0P1のように記述し、既定の優先度はP0です。たとえば次のようにすると、

Menu, MySubmenu, Add, Item1
Menu, Tray,      Add, Submenu, :MySubmenu
return

Item1:
  ; メニューから実行する処理
return

下図のようにメニューが追加されます。

区切り線の追加

Add以降のパラメータを指定せず、

Menu, Tray, Add

とすると、区切り線が追加されます。

既定の項目の変更 (Default)

メニューの既定の項目を変更できます。既定の項目とは太字のフォントで表示され、トレイのアイコンをダブルクリックしたときに実行される項目です。

Menu, MenuName, Default [, MenuItemName]

MenuItemNameでは、標準のメニュー項目を指定できません。どうしても指定するならば、同じ機能のメニュー項目を作成し、それを既定の項目に指定します。

Menu, Tray, Add,     Edit This Script, EditScript
Menu, Tray, Default, Edit This Script
return

EditScript:
    Edit
return

メニュー項目のアイコン

CmdパラメータをIconとします。

Menu, MenuName, Icon, MenuItemName, FileName [, IconNumber, 1]

IconNumberは、読み込むファイルがアイコン ライブラリのとき、そのライブラリにおけるアイコンの番号を指定します。

最後のパラメータを1とすることで、ポーズやサスペンド時にアイコンが変更されないようになります。これを0とするかまたは指定しないと、ポーズやサスペンド時には既定のアイコンに変更されます。一方でポーズやサスペンドしているときにアイコンを変更するには、このパラメータを1とします。さもなくばアイコンの変更が適用されません。

トレイのアイコンを変更するには、MenuNameを「Tray」とします。

Menu, Tray, Icon [, FileName, IconNumber, 1]

TrayTip

トレイ (通知領域) にバルーンチップを表示できます。

TrayTip [, Title, Text, Seconds, Options]
TrayTip

たとえば、

TrayTip, My Title, Multiline`nText, 20, 17

とすると、

のように表示されます。

表示時間

表示時間はSecondsで指定し、10から30秒の間である必要があります。これより短い時間だけ表示するには、タイマーを使用して明示的にバルーンチップを消去します。

TrayTip, Timed TrayTip, This will be displayed for 5 seconds.
SetTimer, RemoveTrayTip, 5000
return

RemoveTrayTip:
    SetTimer, RemoveTrayTip, Off
    TrayTip  ; バルーンチップを消去
return

30秒より長い時間表示するには、定期的に表示をくり返します。次の方法では1秒ごとに表示します。そのためこの方法では、表示するたびにちらつきが発生してしまいます。

SetTimer, RefreshTrayTip, 1000
Gosub, RefreshTrayTip  ; Call it once to get it started right away.
return

RefreshTrayTip:
    TrayTip, Refreshed TrayTip, This is a more permanent TrayTip., , 16
return

表示方法

Optionsで、アイコンや音を指定できます。

機能 10進 16進
Info icon 1 0x1
Warning icon 2 0x2
Error icon 3 0x3
Do not play the notification sound (Windows XP以降) 16 0x10
Use the large version of the icon (Windows Vista以降) 32 0x20

Gui

Gui, SubCommand [, Value1, Value2, Value3]
Gui - Syntax & Usage | AutoHotkey

Add

Gui, Add, ControlType [, Options, Text]

Optionsで先頭に「v」を付加すると、それがコントロールに関連付けられた変数と見なされます。Storing and Responding to User Input - Gui - Syntax & Usage | AutoHotkey

また「g」を付加すると、コントロールがクリックまたは変更されたときにそのラベル (g-label) が実行されます。

Sample:
    Gui, Add, Edit, vA            ; コントロールの内容は、Gui, Submitの呼び出しで変数Aに格納される
    Gui, Add, Button, default, OK ; このボタンが押されると、"Button" + "OK"の名前のラベルへ処理が移る
    Gui, Add, Button, , Cancel
    Gui, Show                     ; ウィンドウを表示する
return

ButtonOK:
    Gui, Submit ; コントロールの内容をそれに関連付けられた変数へ格納し、ウィンドウを隠す
    MsgBox, % A
return

ButtonCancel:
GuiEscape:    ; Escが押されると呼び出される
    Gui, Hide ; ウィンドウを隠す
return

GuiClose:     ; ウィンドウが閉じられると呼び出される
return

コントロールの内容を変数を介して取得するには、Gui, Submitを呼ぶ必要があります。ただしHotkeyコントロールのようにg-labelの呼び出しで関連付けられた変数に値が格納されるものもあり、その場合はGui, Submitは不要です。

ユーザーによってタイトルバーの「X」などで閉じられたときには、ウィンドウは非表示となるだけです。そのためその後でAddでコントロールを追加すると「Error: The same variable cannot be used for more than one control.」として追加に失敗します。これに対処するにはGUIをあらかじめ作成しておき必要なときにGui, Showで表示するだけとするか、GuiCloseでGui, Destroyにより都度ウィンドウを破棄します。GuiClose - Gui - Syntax & Usage | AutoHotkey

Text

Optionsで「g」に続けてラベルを指定すると、テキストがクリックされたときにそれが呼び出されます。Text - GUI Control Types - Syntax & Usage | AutoHotkey

Gui, Add, Text, gMyLabel, Click here

Button

Optionsでdefaultを指定すると、Enterが押されたときにそのボタンのラベルが処理されます。一方でEscに反応するには、GuiEscapeラベルにその処理を記述します。

Gui, Add, Button, default, OK

Checkbox

Gui, Add, CheckBox, vA, box1
Gui, Add, CheckBox, vB Checked, box2            ; "On"の状態で開始する
Gui, Add, CheckBox, vC Check3, box3             ; 不定を有効にする
Gui, Add, CheckBox, vD Check3 CheckedGray, box4 ; "不定"の状態で開始する
表示 状態
チェックされている On 1
チェックされていない Off 0
グレー表示 不定 -1

Radio

連続するRadioは同一グループと見なされます。そのときOptionsでGroupが指定されるか、Radioではないコントロールがあると、そこから新しいグループと見なされます。

Gui, Add, Radio, vA, radio1
Gui, Add, Radio, , radio2
Gui, Add, Radio, Checked, radio3 ; "on"の状態で開始する

Gui, Add, Radio, vB Group, radio1 ; ここから新しいグループ
Gui, Add, Radio, , radio2

Gui, Add, Text, , TEST
Gui, Add, Radio, vC, radio1 ; ここから新しいグループ

関連付けた変数には、何も選択されていないならば0、最初のRadioが選択されたならば1、次ならば2とその番号が格納されます。Radio - GUI Control Types - Syntax & Usage | AutoHotkey

Hotkey

初期値を設定するならば、

Gui, Add, Hotkey, vChosenHotkey, ^!p

のようにTextのパラメータで指定します。

EnterSpaceなど、認識されないキーがあります。Pause key doesent work with gui hotkey. - AutoHotkey Community

GuiControl

GUIウィンドウのコントロールを操作できます。

GuiControl, SubCommand, ControlID [, Value]
GuiControl - Syntax & Usage | AutoHotkey

(Blank)

SubCommandを省略する形式では、コントロールを新しい内容にできます。

GuiControl,, ControlID [, Value]
(Blank) - GuiControl - Syntax & Usage | AutoHotkey

たとえば

Gui, Add, Edit, vA

として作成されているコントロールがあるとき、

GuiControl, , A, ABC

とすると、変数Aと関連付けられているEditコントロールに値が設定されます。

Radio

たとえば

Gui, Add, Radio, vA, radio1
Gui, Add, Radio, , radio2

のように作成されたGUIがあるとき、radio2がチェックされている状態で

Gui, Submit

を呼び出すと、変数Aに2が格納されます。このとき逆に

GuiControl, , A, 2

として変数Aに関連付けられているコントロールに2を設定すると、radio1のテキストが"2"に書き換えられます。これをradio2がチェックされている状態とするには、

GuiControl, , radio2, 1

のようにして、チェックしたいコントロールのテキストもしくはControlIDを指定して、チェック状態を意味する1を設定します。

イベント

以下のラベルがスクリプト内にあるとき、GUIウィンドウに自動的に関連付けられます。

  • GuiClose
  • GuiEscape
  • GuiSize
  • GuiContextMenu
  • GuiDropFiles
Window Events - Gui - Syntax & Usage | AutoHotkey

GuiClose

  • タイトルバーのXボタンが押される
  • システム メニューの[閉じる]が選択される
  • WinCloseで閉じられる

のいずれかでウィンドウが閉じられたときに呼ばれます。GuiClose - Gui - Syntax & Usage | AutoHotkey

コントロールの配置

コントロールを追加すると、それらは下に配置されていきます。

Gui, Add, Button, , Button1
Gui, Add, Button, , Button2
Gui, Add, Button, , Button3
Gui, Add, Edit
Gui, Add, Edit

これらを横に配置するには、基準とするコントロールにSectionを指定し、後続するコントロールをysとして同じy軸上の位置を基準とします。

Gui, Add, Button, Section, Button1
Gui, Add, Button, ys, Button2
Gui, Add, Button, ys, Button3
Gui, Add, Edit
Gui, Add, Edit

前述の方法では位置を明示しないコントロールにも影響が及ぶため、それが意図したものでなければ-xsでそれを解除します。

Gui, Add, Button, Section, Button1
Gui, Add, Button, ys, Button2
Gui, Add, Button, ys, Button3
Gui, Add, Edit, -xs
Gui, Add, Edit

SplashTextOn

カスタマイズ可能な、テキスト表示のポップアップ ウィンドウを作成できます。

SplashTextOn [, Width, Height, Title, Text]
SplashTextOn/SplashTextOff
パラメータ 説明 既定値
Width ウィンドウのピクセル単位での幅 200
Height ウィンドウのピクセル単位での高さ (タイトルバーは除く) 0
Title ウィンドウのタイトル ""
Text※1 ウィンドウのテキスト ""
※1 Heightの既定値が0であるため、それを指定しないとTextの内容は表示されません。

SplashTextOnで表示したウィンドウは、そのスレッドの終了またはSplashTextOffにより消去されるまで表示され続けます。またつねに前面に表示され、ウィンドウ表示時に再びSplashTextOnを実行すると、ウィンドウは新しい設定で再生成されます。

たとえば次のようにタイトルだけを指定すると、

SplashTextOn, , , Displays only a title bar.

下図のように表示されます。

ウィンドウのサイズを含めてテキストも指定すると、

SplashTextOn, 300, 200, title, text

下図のようになります。

SplashTextOff

存在するポップアップ ウィンドウを除去できます。

SplashTextOff

パラメータはありません。