17

【イメージ】

【主な機能】
・ボタンのテキストを任意設定でき、任意個数のボタンを追加できます
・タイトルの閉じるボタンを非表示にできます
・指定座標に表示できます
・背景色とフォント色を設定できます

【設定値の説明】
「タイトル」待機ボックスのタイトルを指定します。
「メッセージ」待機ボックスのメッセージを指定します。改行したい場合は、メッセージの中で「<br>」と入れるとその位置で改行されます。
「ボタン」表示するボタンを指定します。カンマ区切りで複数指定します。例「OK,キャンセル,ボタン1,ボタン2」
「x座標」、「y座標」待機ボックスを表示する座標を数値で指定します。
「表示位置種別」画面中央に待機ボックスを表示させたい場合は「CenterScreen」を指定します。上記の「x座標」、「y座標」の位置に表示する場合は「Manual」を指定します。
「閉じるボタンを表示」閉じるボタンを表示する場合は「True」しない場合は「False」を指定します。
「最前面に表示」最前面ウィンドウにする場合は「True」しない場合は「False」を指定します。
「フォント色」フォントの色を指定します。例「red」,「blue」,「#00FF00」など詳しくはこちら
「背景色」背景色を指定します。フォント色の例を参照
「デフォルトボタン番号」既定のボタンを指定します。0を指定した場合は一番左側のボタンが規定となります。
「結果」押されたボタン名を取得する変数を指定します。

【スクリプト】

cmd = "powershell.exe -command """ & _
"$title='" & !タイトル! & "';" & _
"$message='" & !メッセージ! & "';" & _
"$message=$message -replace '<br>',""""""`r`n"""""";" & _
"$bs='" & !ボタン! & "';" & _
"$x=[int]'" & !x座標! & "';" & _
"$y=[int]'" & !y座標! & "';" & _
"$sp='" & !表示位置種別! & "';" & _
"$cb=[System.Convert]::ToBoolean('" & !閉じるボタンを表示! & "');" & _
"$tm=[System.Convert]::ToBoolean('" & !最前面に表示! & "');" & _
"$fColor='" & !フォント色! & "';" & _
"$bColor='" & !背景色! & "';" & _
"$db=[int]'" & !デフォルトボタン番号! & "';" & _
"Add-Type -AssemblyName System.Windows.Forms;" & _
"$f=New-Object System.Windows.Forms.Form;" & _
"$f.Text=$title;" & _
"$f.Location=New-Object System.Drawing.Point($x,$y);" & _
"$f.StartPosition=$sp;" & _
"$f.FormBorderStyle='FixedSingle';" & _
"$f.AutoSize=1;" & _
"$f.AutoSizeMode=0;" & _
"$f.MaximizeBox=0;" & _
"$f.MinimizeBox=0;" & _
"$f.ControlBox=$cb;" & _
"$f.TopMost=$tm;" & _
"$f.BackColor=$bColor;" & _
"$l=New-Object System.Windows.Forms.Label;" & _
"$l.Location=New-Object System.Drawing.Point(10,10);" & _
"$l.AutoSize=1;" & _
"$l.Text=$message;" & _
"$l.font=New-Object System.Drawing.Font('MS ゴシック',11);" & _
"$l.forecolor=$fColor;" & _
"$p=New-Object System.Windows.Forms.FlowLayoutPanel;" & _
"$p.AutoSize=1;" & _
"$p.AutoSizeMode=0;" & _
"$f.Controls.Add($l);" & _
"$f.ActiveControl=$l;" & _
"$f.Controls.Add($p);" & _
"$p.Location=New-Object System.Drawing.Point(3,($l.Size.Height+10));" & _
"$ab=$bs -split ',';" & _
"for($i=0;$i -lt $ab.Length;$i++){" & _
"$b=New-Object System.Windows.Forms.Button;" & _
"$b.AutoSize=1;" & _
"$b.Text=$ab[$i];" & _
"$b.add_Click({Write-Host $this.Text;$f.Close();});" & _
"$b.BackColor='Control';" & _
"$p.Controls.Add($b);" & _
"if($i -eq $db){$f.ActiveControl=$b;}" & _
"}" & _
"[void]$f.ShowDialog();"""

Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec(cmd)
Do While objExec.Status = 0
  WScript.Sleep 300
Loop

SetUMSVariable $結果$, objExec.StdOut.ReadLine

Set objExec = Nothing
Set objShell = Nothing

【備考】
Windows 10で動作確認をしています。Windows 7では動かないかもしれません。
バグ等あるかもしれません。スクリプトはよしなに改変して使用してください。

JQ 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。