【PowerShell】Windows環境でのGUIプログラム集 (サンプル集)

Windows環境でのGUIプログラムのサンプル集です。
Windows10 で動作確認しています。
 

 

コンボボックス

プルダウンメニュから選択する

下記 TEMPLATE.xml の type="main" の < DIR> の値をフォームのコンボボックス(プルダウンメニュ)の項目として使用する。
コンボボックスにて項目を選択したら、イベントを受信して選択した内容をコンソールに表示している。

 

実行例

f:id:dnkrnka:20181007044059p:plain
 

TEMPLATE.xml
<?xml version="1.0" encoding="UTF-8"?>
<BINS>
  <BIN type="main">
    <DIR>C:\work\PowerShellGui\output\rel-main-*_*</DIR>
  </BIN>
  <BIN type="sub">
    <DIR>C:\work\PowerShellGui\output\rel-sub-*_*</DIR>
  </BIN>
</BINS>

 

Form_ComboBox1.ps1
# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# フォントの指定
$Font = New-Object System.Drawing.Font("メイリオ",10)

# フォームの作成 
$form = New-Object System.Windows.Forms.Form
$form.Size = "850,280"
$form.Startposition = "CenterScreen"
$form.Text = "TEST"

# ラベルを作成
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,10)
$label.Size = New-Object System.Drawing.Size(240,20)
$label.Text = "パラメータを設定してください"
$form.Controls.Add($label)

#--------------------------------------------------------
# ファイル名選択
#--------------------------------------------------------
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,50)
$label.Size = New-Object System.Drawing.Size(130,15)
$label.Text = "ファイル名"
$form.Controls.Add($label)

$comboBox1 = New-Object System.Windows.Forms.Combobox
$comboBox1.Location = New-Object System.Drawing.Point(150,50)
$comboBox1.size = New-Object System.Drawing.Size(450,10)
$comboBox1.DropDownStyle = "DropDown"
$comboBox1.FlatStyle = "standard"
$comboBox1.font = $Font
$comboBox1.BackColor = "white"
$comboBox1.ForeColor = "Black"

# TEMPLATE.xml の内容を項目として使用する 
$ITEMS      = @()
$XML =[XML](Get-Content "TEMPLATE.xml")
foreach( $b in $XML.BINS.BIN[0] )
{
    # コンボボックスに項目を追加
    [void] $comboBox1.Items.Add($b.DIR)
}

$ComboBox1.add_SelectedIndexChanged($ComboBox1_SelectedIndexChanged)

# フォームにコンボボックスを追加
$form.Controls.Add($comboBox1)

# -------------------------------------------------------------------------------
#                             Change triggered function
# -------------------------------------------------------------------------------
$ComboBox1_SelectedIndexChanged=
{
    write-host $ComboBox1.text
}

$ComboBox1.add_SelectedIndexChanged($ComboBox1_SelectedIndexChanged)


# OKボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = "40,200"
$OKButton.Size = "75,30"
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK

# キャンセルボタンの設定
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = "130,200"
$CancelButton.Size = "75,30"
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel

# フォームにアイテムを追加
$form.Controls.Add($label)
$form.Controls.Add($OKButton)
$form.Controls.Add($CancelButton)
$form.Controls.Add($ComboBox1)

# キーとボタンの関係
$form.AcceptButton = $OKButton
$form.CancelButton = $CancelButton

# フォームを最前面に表示
$form.Topmost = $True

# フォームを表示+選択結果を変数に格納
$result = $form.ShowDialog()

# 選択後、OKボタンが押された場合、選択項目を表示
if ($result -eq "OK")
{
    $AAA = $comboBox1.Text
}else{
    exit
}

Write-Host $AAA

 

プルダウンメニュから時刻を選択する

時・分・秒を選択して「OK」を押下したら、選択した時刻をコンソールに表示するプログラム。

実行例

f:id:dnkrnka:20181020143954p:plain
 

TimeSelect.ps1
# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 時刻の取得
$HH = Get-Date -format "HH"     # Hour
$MM = Get-Date -format "mm"     # Minute
$SS = Get-Date -format "ss"     # Second

# フォームの作成 
$Form = New-Object System.Windows.Forms.Form
$Form.Size = "240,80"
$Form.Startposition = "CenterScreen"
$Form.Text = "TimeSelect"

$comboBoxHH = New-Object System.Windows.Forms.Combobox
$comboBoxHH.Location = New-Object System.Drawing.Point(10,10)
$comboBoxHH.size = New-Object System.Drawing.Size(40,5)
$comboBoxHH.DropDownStyle = "DropDown"
$comboBoxHH.FlatStyle = "standard"
$comboBoxHH.BackColor = "white"
$comboBoxHH.ForeColor = "Black"
for( $i = 0; $i -lt 24; $i++ )
{
    $str = $i.ToString("00")
    [void] $comboBoxHH.Items.Add($str)
}
$comboBoxHH.SelectedIndex = $HH
$Form.Controls.Add($comboBoxHH)

# 分の選択画面
$comboBoxMM = New-Object System.Windows.Forms.Combobox
$comboBoxMM.Location = New-Object System.Drawing.Point(55,10)
$comboBoxMM.size = New-Object System.Drawing.Size(40,5)
$comboBoxMM.DropDownStyle = "DropDown"
$comboBoxMM.FlatStyle = "standard"
$comboBoxMM.BackColor = "white"
$comboBoxMM.ForeColor = "Black"
for( $i = 0; $i -lt 59; $i++ )
{
    $str = $i.ToString("00")
    [void] $comboBoxMM.Items.Add($str)
}
$comboBoxMM.SelectedIndex = $MM
$Form.Controls.Add($comboBoxMM)

# 秒の選択画面
$comboBoxSS = New-Object System.Windows.Forms.Combobox
$comboBoxSS.Location = New-Object System.Drawing.Point(95,10)
$comboBoxSS.size = New-Object System.Drawing.Size(40,5)
$comboBoxSS.DropDownStyle = "DropDown"
$comboBoxSS.FlatStyle = "standard"
$comboBoxSS.BackColor = "white"
$comboBoxSS.ForeColor = "Black"
for( $i = 0; $i -lt 59; $i++ )
{
    $str = $i.ToString("00")
    [void] $comboBoxSS.Items.Add($str)
}
$comboBoxSS.SelectedIndex = $SS
$Form.Controls.Add($comboBoxSS)

# OKボタンの設定
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = "170,10"
$okButton.Size = "40,20"
$okButton.Text = "OK"
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
# フォームにコントロールを追加
$Form.Controls.Add($okButton)

# GUI を起動する
$result = $Form.ShowDialog()

# OK が押されたら選択した時刻を表示する
if( $result -eq [System.Windows.Forms.DialogResult]::OK )
{
  write-host "$($comboBoxHH.text):$($comboBoxMM.text):$($comboBoxSS.text)"
}

 
 

DateTimePicker コントロール

日付をカレンダ形式で選択する

最後に「OK」ボタンを押下すると選択した日付が表示される。

実行例

f:id:dnkrnka:20181020132422p:plain
 
なお、コードの「$Date.ShowUpDown」の値を $True に変更すると次のように上下ボタンでの選択となる。
f:id:dnkrnka:20181020132107p:plain
 

Calendar.ps1
# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# フォームの作成 
$Form = New-Object System.Windows.Forms.Form
$Form.Size = "230,80"
$Form.Startposition = "CenterScreen"
$Form.Text = "Calendar"

# カレンダ選択部の作成
$Date = New-Object System.Windows.Forms.DatetimePicker
$Date.Location = New-Object System.Drawing.Point(10,10)
$Date.Size = New-Object System.Drawing.Size(120,10)
$Date.Format = "Custom"
$Date.ShowUpDown = $False  # ここを $True にすると上下ボタンでの選択になる
$Date.CustomFormat = "yyyy/MM/dd"
# フォームにコントロールを追加
$Form.Controls.Add($Date)

# OKボタンの設定
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = "160,10"
$okButton.Size = "40,20"
$okButton.Text = "OK"
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
# フォームにコントロールを追加
$Form.Controls.Add($okButton)

# フォームを選択した状態にする
$Form.Add_Shown($Form.Activate())

# GUI を起動する
$result = $Form.ShowDialog()

# OK が押されたら選択した日付を表示する
if( $result -eq [System.Windows.Forms.DialogResult]::OK )
{
  write-host $Date.Value.Date.ToShortDateString()
}