PowerShellはシステム管理や自動化に強力なツールですが、GUI(グラフィカルユーザーインターフェース)を追加することで、管理タスクや操作をユーザーフレンドリーにできます。
本記事では、Windows FormsとWPF(Windows Presentation Foundation)を使って、PowerShellスクリプトで簡単なGUIアプリを作成する方法を解説します。
この記事を読むことで、以下のことが理解できます。
- PowerShellでWindows FormsとWPFを使った基本的なGUIの作成方法
- それぞれの技術を使う利点と使い分け方
- 実際に使えるサンプルコード
さらに、学習内容を確認できる演習問題と解答例も用意していますので、ぜひ試してみてください。
Windows FormsでのGUI作成
Windows Formsとは?
Windows Formsは、Microsoftが提供するGUIフレームワークで、Windows環境で簡単なデスクトップアプリを構築するのに最適です。
古くから存在するため、多くのドキュメントが揃っており、構造がシンプルなので学びやすいのが特徴です。
Windows Formsのサンプルコード
以下のスクリプトは、PowerShellでWindows Formsを使ってシンプルなボタン付きのフォームを作成する例です。
ボタンをクリックするとメッセージボックスが表示されます。
# Windows Formsのライブラリをロード
Add-Type -AssemblyName System.Windows.Forms
# フォームの作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "サンプルフォーム"
$form.Width = 300
$form.Height = 200
# ボタンの作成
$button = New-Object System.Windows.Forms.Button
$button.Text = "クリックしてね"
$button.Width = 150
$button.Height = 50
$button.Location = New-Object System.Drawing.Point(75, 50)
# ボタンクリック時のイベント
$button.Add_Click({
[System.Windows.Forms.MessageBox]::Show("ボタンがクリックされました!", "メッセージ")
})
# フォームにボタンを追加
$form.Controls.Add($button)
# フォームを表示
$form.ShowDialog()
スクリプトの解説
- Add-Type コマンドで、System.Windows.Formsライブラリをロードします。
- New-Object でフォームとボタンを作成し、各プロパティを設定します。
- ボタンにクリックイベントを追加して、メッセージボックスが表示されるようにしています。
- 最後にShowDialog()メソッドでフォームを画面に表示します。
WPFでのGUI作成
WPFとは?
WPF(Windows Presentation Foundation)は、Windows Formsよりも柔軟なレイアウトとスタイリッシュなUIが特徴のGUIフレームワークです。
XAMLというマークアップ言語を使ってUIを定義し、視覚的に洗練されたアプリを構築するのに向いています。
WPFのサンプルコード
以下は、PowerShellを使ってWPFのウィンドウを作成するサンプルスクリプトです。
# WPFのライブラリをロード
Add-Type -AssemblyName PresentationFramework
# XAMLでウィンドウを定義
$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="WPFサンプル" Height="200" Width="300">
<Grid>
<Button Name="btn" Width="150" Height="50" VerticalAlignment="Center" HorizontalAlignment="Center">
クリックしてね
</Button>
</Grid>
</Window>
"@
# XAMLをPowerShellオブジェクトに変換
$reader = New-Object System.Xml.XmlNodeReader (New-Object System.Xml.XmlDocument)
$reader.ReadOuterXml($xaml) | Out-Null
$window = [Windows.Markup.XamlReader]::Load($reader)
# ボタンクリック時のイベント
$button = $window.FindName("btn")
$button.Add_Click({
[System.Windows.MessageBox]::Show("WPFボタンがクリックされました!", "メッセージ")
})
# ウィンドウを表示
$window.ShowDialog()
スクリプトの解説
- Add-TypeでPresentationFrameworkをロードします。
- XAMLでウィンドウのレイアウトを定義します。
- XmlNodeReaderを使ってXAMLをPowerShellのオブジェクトに変換します。
- ボタンにクリックイベントを追加し、メッセージボックスが表示されるようにします。
- ShowDialog()でウィンドウを表示します。
Windows FormsとWPFの使い分け
項目 | Windows Forms | WPF |
---|---|---|
学習コスト | 低い | やや高い |
レイアウトの柔軟性 | 限定的 | 高い |
デザイン性 | シンプル | スタイリッシュなデザインが可能 |
パフォーマンス | 軽量 | 3D描画などリッチなUIに対応 |
適用場面 | 簡単なツールや管理画面 | 洗練されたユーザー向けアプリ |
Windows Formsはシンプルなツールや社内向けの管理画面に適しており、WPFはデザイン性が求められるユーザー向けアプリに向いています。用途に応じて使い分けましょう。
演習問題
問題1:Windows Formsのフォームにテキストボックスを追加し、ユーザーが入力した文字列を表示する
- フォームにラベルとテキストボックスを追加します。
- ボタンをクリックすると、ラベルにテキストボックスの入力内容が表示されるようにしてください。
問題2:WPFのウィンドウに複数のボタンを配置し、ボタンごとに異なるメッセージを表示する
- 3つのボタンを作成し、それぞれをクリックすると異なるメッセージを表示するようにしてください。
演習問題の解答例
問題1の解答例:Windows Forms
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = "テキスト入力フォーム"
$form.Width = 300
$form.Height = 200
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10, 80)
$label.Width = 260
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10, 10)
$textBox.Width = 260
$button = New-Object System.Windows.Forms.Button
$button.Text = "表示"
$button.Location = New-Object System.Drawing.Point(10, 40)
$button.Add_Click({
$label.Text = "入力されたテキスト: " + $textBox.Text
})
$form.Controls.Add($label)
$form.Controls.Add($textBox)
$form.Controls.Add($button)
$form.ShowDialog()
問題2の解答例:WPF
Add-Type -AssemblyName PresentationFramework
$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="複数ボタンのサンプル" Height="200" Width="300">
<StackPanel>
<Button Name="btn1" Content="ボタン1" Margin="5"/>
<Button Name="btn2" Content="ボタン2" Margin="5"/>
<Button Name="btn3" Content="ボタン3" Margin="5"/>
</StackPanel>
</Window>
"@
$reader = New-Object System.Xml.XmlNodeReader (New-Object System.Xml.XmlDocument)
$reader.ReadOuterXml($xaml) | Out-Null
$window = [Windows.Markup.XamlReader]::Load($reader)
$window.FindName("btn1").Add_Click({ [System.Windows.MessageBox]::Show("ボタン1がクリックされました") })
$
window.FindName("btn2").Add_Click({ [System.Windows.MessageBox]::Show("ボタン2がクリックされました") })
$window.FindName("btn3").Add_Click({ [System.Windows.MessageBox]::Show("ボタン3がクリックされました") })
$window.ShowDialog()
まとめ
この記事では、PowerShellでWindows FormsとWPFを使ったGUI作成の基礎を紹介しました。
それぞれの技術には利点があり、用途に応じて使い分けることが重要です。
演習問題も通して、実際に手を動かしながら学んでみましょう。
これをきっかけに、さらに高度なGUI開発に挑戦してみてください。