自由テーマ

PowerAutomate

PowerShellでXAMLを読み込み、WPFベースのGUIアプリケーションを構築する基本的な手順とコード例を解説する。

1. PowerShellとWPF

PowerShellはスクリプト実行環境であり、Windows Presentation Foundation (WPF) はGUIアプリケーション開発フレームワークである。WPFはXAML(Extensible Application Markup Language)を使用してUIを定義する。PowerShellからWPFの機能を直接利用することで、複雑なGUIを持つツールを開発可能である。

2. XAMLファイルの定義

まず、GUIのレイアウトと要素をXAMLで定義する。以下の例は、ウィンドウ、テキストブロック、ボタンを含む基本的なXAML構造を示す。これを SimpleWindow.xaml として保存する。

<Window x:Class="SimpleApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="PowerShell WPF GUI" Height="200" Width="300">
    <Grid>
        <StackPanel Margin="10">
            <TextBlock Name="messageTextBlock" Text="Hello from PowerShell!" Margin="0,0,0,10" FontSize="14" HorizontalAlignment="Center"/>
            <Button Name="myButton" Content="Click Me" Width="100" Height="30" HorizontalAlignment="Center"/>
        </StackPanel>
    </Grid>
</Window>

3. PowerShellスクリプトでのXAMLの読み込みとGUI表示

PowerShellスクリプトから上記のXAMLファイルを読み込み、WPFオブジェクトとしてインスタンス化する。その後、イベントハンドラを設定し、ウィンドウを表示する。

# WPFアセンブリのロード
try {
    Add-Type -AssemblyName PresentationFramework, PresentationCore, WindowsBase
} catch {
    Write-Error "WPFアセンブリのロードに失敗しました: $($_.Exception.Message)"
    exit 1
}

# XAMLファイルの読み込み
$xamlPath = Join-Path (Split-Path $MyInvocation.MyCommand.Path) "SimpleWindow.xaml"
if (-not (Test-Path $xamlPath)) {
    Write-Error "XAMLファイルが見つかりません: $xamlPath"
    exit 1
}

[xml]$xaml = Get-Content -Path $xamlPath -Encoding UTF8

# XAMLからGUIオブジェクトを生成
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [System.Windows.Markup.XamlReader]::Load($reader)

# GUI要素の取得
$messageTextBlock = $window.FindName("messageTextBlock")
$myButton = $window.FindName("myButton")

# イベントハンドラの設定
$myButton.Add_Click({
    $messageTextBlock.Text = "Button Clicked! ($(Get-Date -Format 'HH:mm:ss'))"
})

# ウィンドウの表示
$window.ShowDialog() | Out-Null

4. 処理フロー

PowerShellスクリプトによるXAMLベースのGUIアプリケーションの基本的な処理フローは以下の通りである。

graph TD
    A["XAMLファイル定義"] --> B["PowerShellスクリプト実行"];
    B --> C{"WPFアセンブリロード"};
    C --> D["XAMLファイルをXMLとして読み込み"];
    D --> E["XamlReaderでGUIオブジェクト生成"];
    E --> F["GUI要素を名前で取得"];
    F --> G["イベントハンドラスクリプトブロックを登録"];
    G --> H["GUIウィンドウ表示 (ShowDialog)"];
    H -- ユーザー操作 --> I{"イベント発生?"};
    I -- Yes --> G;
    I -- No --> H;
    H -- ウィンドウ閉じる --> J["スクリプト終了"];
ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました