Param ( [string]$file = "", [string]$text = "", [string]$buttons = "OK:0", [string]$default = "", [switch]$nearmouse = $false, [switch]$center = $false, [string]$geometry = "", [int32]$timeout = 0, [string]$title = "Message" ) Add-Type -assembly System.Windows.Forms $global:Result = 0 $main_form = New-Object System.Windows.Forms.Form $main_form.Text = $title $geometry_data = $geometry.Split("+") if ($geometry_data.Length -ge 1) { $size_data = $geometry_data[0].Split("x") if ($size_data.Length -eq 2) { $main_form.Width = $size_data[0] $main_form.Height = $size_data[1] } } if ($geometry_data.Length -eq 3) { $main_form.StartPosition = [System.Windows.Forms.FormStartPosition]::Manual $main_form.Location = New-Object System.Drawing.Point($geometry_data[1], $geometry_data[2]) } if ($nearmouse) { $main_form.StartPosition = [System.Windows.Forms.FormStartPosition]::Manual $main_form.Location = System.Windows.Forms.Cursor.Position } if ($center) { $main_form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen } $main_form.SuspendLayout() $button_panel = New-Object System.Windows.Forms.FlowLayoutPanel $button_panel.SuspendLayout() $button_panel.FlowDirection = [System.Windows.Forms.FlowDirection]::RightToLeft $button_panel.Dock = [System.Windows.Forms.DockStyle]::Bottom $button_panel.Autosize = $true if ($file -ne "") { $text = [IO.File]::ReadAllText($file).replace("`n", "`r`n") } if ($text -ne "") { $text_box = New-Object System.Windows.Forms.TextBox $text_box.Multiline = $true $text_box.ReadOnly = $true $text_box.Autosize = $true $text_box.Text = $text $text_box.Select(0,0) $text_box.Dock = [System.Windows.Forms.DockStyle]::Fill $main_form.Controls.Add($text_box) } $buttons_array = $buttons.Split(",") foreach ($button in $buttons_array) { $button_data = $button.Split(":") $button_ctl = New-Object System.Windows.Forms.Button if ($button_data.Length -eq 2) { $button_ctl.Tag = $button_data[1] } else { $button_ctl.Tag = 100 + $buttons_array.IndexOf($button) } if ($default -eq $button_data[0]) { $main_form.AcceptButton = $button_ctl } $button_ctl.Autosize = $true $button_ctl.Text = $button_data[0] $button_ctl.Add_Click( { Param($sender) $global:Result = $sender.Tag $main_form.Close() } ) $button_panel.Controls.Add($button_ctl) } $main_form.Controls.Add($button_panel) $button_panel.ResumeLayout($false) $main_form.ResumeLayout($false) if ($timeout -gt 0) { $timer = New-Object System.Windows.Forms.Timer $timer.Add_Tick( { $global:Result = 0 $main_form.Close() } ) $timer.Interval = $timeout $timer.Start() } $dlg_res = $main_form.ShowDialog() [Environment]::Exit($global:Result)