WindowsでバッチファイルやPowerShellスクリプトを作成していると、ユーザーにメッセージを表示して、選択肢から選択してほしいときがあります。
そのようなとき、コマンドプロンプトやPowerShellの画面にテキストでメニューなどを表示する方法もありますが、以下のようなメッセージウィンドウを表示してユーザーにクリック操作で選択してもらうという方法もあります。
そこでここでは、バッチファイルやPowerShellスクリプトで上のようなメッセージウインドウを表示して、ユーザーがクリックした「はい/いいえ」「Yes/No/Cancel」などのボタンに応じた処理を実行する方法を解説します。
目次
メッセージウィンドウを表示する
バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示するには、PowerShellから.NETライブラリを読み込む必要があるので、まず、PowerShellで以下のコマンドを実行します。
PS> Add-Type -AssemblyName System.Windows.Forms
.NETライブラリを読み込んだら、以下のようにコマンドを実行することでメッセージウィンドウを表示できます。
PS> [System.Windows.Forms.MessageBox]::Show("これはサンプルです。", 'サンプル', 'YesNoCancel', 'Question')
「[System.Windows.Forms.MessageBox]::Show」では、第1引数でメッセージウィンドウに表示する文章、第2引数でメッセージウィンドウのタイトル、第3引数でボタンのタイプ、第4引数でアイコンのタイプを指定し、引数が設定されていない場合はデフォルト値で実行されます。
第1引数に表示する文章を途中で改行したいときは、改行したい位置に「`n」を記述します。
第3引数に指定できるボタンのタイプは、次のとおりです。
値 | 表示されるボタン |
---|---|
AbortRetryIgnore | 中止/再試行/無視 |
OK | OK |
OKCancel | OK/キャンセル |
RetryCancel | 再試行/キャンセル |
YesNo | はい/いいえ |
YesNoCancel | はい/いいえ/キャンセル |
第4引数に指定できるアイコンのタイプは、次のとおりです。
値 | 表示されるアイコン |
---|---|
Information | 青い〇に「i」 |
Error | 赤い〇に「×」 |
Warning | 黄色い△に「!」 |
Question | 青い〇に「?」 |
None | アイコン表示なし |
なお、メッセージウィンドウで押されたボタンに応じた戻り値が返されるので、変数に格納するなどして判定できます。
PS> $resutl = [System.Windows.Forms.MessageBox]::Show("こんなウィンドウが表示できます。", 'サンプル', 'YesNoCancel', 'Question')
PS> echo $resutl
Yes
ボタンごとの戻り値は次のとおりです。なお、デフォルトでは「OK」や「Cancel」といった単語で返されます。
ボタンの名前 | 戻り値 | 数値 |
---|---|---|
OK | OK | 1 |
キャンセル | Cancel | 2 |
中止 | Abort | 3 |
再試行 | Retry | 4 |
無視 | Ignore | 5 |
はい | Yes | 6 |
いいえ | No | 7 |
「$result.value__」とすれば、数値で判定することもできます。たとえば「はい」ボタンをが押されたときは「6」が返ってきます。
PS> $resutl = [System.Windows.Forms.MessageBox]::Show("こんなウィンドウが表示できます。", 'サンプル', 'YesNoCancel', 'Question')
PS> echo $resutl.value__
6
あとは、IF文やSWITCH文を使って「$result」に格納された値に応じた処理を行うことができます。
バッチファイルの場合
コマンドプロンプトやバッチファイルでメッセージウィンドウを表示したいときは、上で紹介したPowerShell上で実行するコマンドを、コマンドプロンプトやバッチファイルからpowershellコマンドの引数として実行することで実現可能です。
> powershell -Command "Add-Type -AssemblyName System.Windows.Forms;$result = [System.Windows.Forms.MessageBox]::Show(\"こんなウィンドウが表示できます。\", 'サンプル', 'YesNoCancel', 'Question');exit $result"
> echo %errorlevel%
6
なお、上のコマンドを実行するとリターンコードとしてボタンに応じた数値が返ってきます。たとえば「はい」ボタンがクリックされた場合は「6」が返されます。
あとがき
コマンド操作に詳しくない方にバッチファイルやPowerShellスクリプトを実行してもらう時などは、条件分岐の際に「OK/Cancel」や「はい/いいえ」などのボタンで選択してもらう方が分かりやすいケースがあり、そのようなときにここで紹介したメッセージウィンドウが役立つでしょう。