[AHK応用] メッセージボックスのボタンの文字を変更する

      2018/04/07

メッセージボックスのボタン変更

MsgBox で表示されるメッセージボックスのボタンを、任意の文字列に変更する方法です。

SPONSORED LINK

決められたボタン以外を表示する

MsgBox に表示できるボタンは、「はい」「キャンセル」「再試行」などの決められた文字列・組み合わせしか利用できません。

しかし、この方法を使えばこんなメッセージボックスを利用できます。

メッセージボックスのボタン変更

もちろん MsgBox の利点の一つである IfMsgBox も利用可能です。

SPONSORED LINK

ソースコード

AutoHotkeyをインストールした環境で以下を拡張子「.ahk」で保存すれば、そのまま実行できます。

#SingleInstance
	SetTimer, rChangeButtonNames, 50
	MsgBox, 0x4, メッセージボックステスト, ボタンを押してください。
	IfMsgBox, YES 
		MsgBox, 「追加」が押されました。
	else 
		MsgBox, 「削除」が押されました。
return 

rChangeButtonNames: 
	IfWinNotExist, メッセージボックステスト
		return ; MsgBox が表示されるのを待ちます
	SetTimer, rChangeButtonNames, Off
	WinActivate 
	ControlSetText, Button1, 追加(&A)
	ControlSetText, Button2, 削除(&D)
return

解説

この例では「はい」ボタンを「追加」に、「いいえ」ボタンを「削除」に変更しています。MsgBox コマンドだけではボタンの文字を自由に設定できませんが、他のコマンドを組み合わせることで実現しています。

まず、50msec ごとに rChangeButtonNames ルーチンを実行するように SetTimer で設定しておきます。rChangeButtonNames ルーチンでは、最初にウインドウタイトルが「メッセージボックステスト」に一致するウインドウがあるかチェックし、無ければその回は何もせずにルーチンを終えています。

MsgBox では、「はい」「いいえ」になるように Options に 0x4 を与えて表示させます。ウインドウタイトルは「メッセージボックステスト」にします。

メッセージボックスを表示すると、50msec ごとに繰り返し実行している rChangeButtonNames ルーチンがこれを検知します。まずルーチンを実行するタイマーを止め、メッセージボックス内のボタンコントロールに対して、文字列の変更をかけます。

ボタンの文字列は変更されましたが、 IfMsgBox で検出するユーザーの操作は元のボタンのままであるため、IfMsgBox, Yes でこれを検知できます。

ポイント

メッセージボックスのウインドウの検知、ボタンの変更にウインドウタイトルを使っているため、ウインドウタイトルが他のウインドウとかぶってしまうとうまく実行できなくなります。

より確実な実行とするためには、ウインドウクラスやウインドウハンドルを用いるとよいでしょう。

itjo レスポンシブ 本文下

 - AutoHotkey
 - ,