プロジェクトの作成
1)
今度は同じアプリをWindows App SDKのWinUI 3で作成します。
WinUI 3
はWindows 10
以降で利用できます。WPF
はWindows 10
より前のOSでも利用可能です。
興味がない人はこのステップ10-2
を読み飛ばしてかまいません。
まずはWindows App SDK
をインストールします。
2)
ワークロードの.NET デスクトップ開発
はインストール済みのはずなので変更は不要です。
以下のサイトのVersion
:1.0 安定
行の、
ダウンロード拡張機能 (VSIX)
:C# Visual Studio 2022 拡張機能
リンクを選択してダウンロードします。
Visual Studio
がすべて終了していることを確認し、ダウンロードしたファイルを起動します。
チェックボックスにチェックが入っていることを確認し、Modify
ボタンを押します。
インストールが完了したらClose
ボタンで閉じます。
以下のサイトのVersion
:1.0 安定
行の、
インストーラーと MSIX パッケージ
:インストーラーと MSIX パッケージのダウンロード
リンクを選択してダウンロードします。
ダウンロードしたファイルを右クリックし、すべて展開
を選択します。
スタートボタンを右クリックし、Windows ターミナル (管理者)
を選択します。
zip展開したWindowsAppSDK-Installer-x64
フォルダのWindowsAppRuntimeInstall.exe
をWindowsターミナルで実行します。
All install operations successful.
と表示されれば成功です。
3)
Visual Studio 2022
を起動します。
新しいプロジェクトの作成でプロジェクトの種類にWinUI
を選択し、
空のアプリ、パッケージ化 (デスクトップの WinUI 3)
を選択し、
次へ
ボタンを押します。
プロジェクト名にConsoleGUI_2
を入力して作成
ボタンを押します。
↓↓↓↓↓
4)
ソリューションエクスプローラーでプロジェクトをダブルクリックします。
PropertyGroup
タグの中に以下を追加します。
<Nullable>enable</Nullable>
<WindowsPackageType>None</WindowsPackageType>
TargetFramework
が.NET 6以降になっていることも確認します。
ソリューションエクスプローラーでPackage.appxmanifest
を削除します。
ソリューションを右クリックし、ソリューションの NuGet パッケージの管理
を選択します。
更新があればアップデートしておきます。
App.xaml.cs
を開き、OnLaunched
メソッドのm_window
のActivate
メソッド呼び出しに?
を付け、
m_window
定義の型のWindow
に?
を付けます。
ソリューションエクスプローラーでProperties
フォルダの中のlaunchSettings.json
を開き、
(Package)
の項目を削除します。
↓↓↓↓↓
launchSettings.json
を保存します。
デバッグ実行のボタンが Unpackaged になっていることを確認します。
デバッグ実行してみます。
起動できました。
Release
モードに変更してメニューのビルド
> ソリューションのリビルド
を選択します。
exeを直接起動してみます。
ファイルサイズはこのくらいです。
モードをDebug
に戻しておきます。
画面の作成
App.xaml
のOther app resources here
の下に以下を定義します。
<!-- ボタンの既定スタイル -->
<Style TargetType="Button">
<Setter Property="Margin"
Value="10,10,0,10" />
<Setter Property="Padding"
Value="20,5" />
</Style>
MainWindow.xaml
のStackPanel
を削除します。
tagと入力し、
TAB
キーを押します。
Enter
を2回押します。
tagと入力してTAB
キーを押します。
開始タグの部分が選択されている状態のままGrid.RowDefinitions
と入力し、Enter
を数回押します。
Grid.RowDefinitions
タグの中でrdと入力し、
TAB
キーを押します。
Height
の設定値が選択されている状態のままAuto
と入力します。
Enter
を2回押します。
rdと入力し、TAB
キーを押し、Enter
を押します。
Grid
の中に以下を入力します。
<StackPanel Orientation="Horizontal">
<Button x:Name="IpConfigButton"
Content="ipconfig"
Click="IpConfigButton_Click" />
<Button Content="Button" />
<Button Content="Button" />
</StackPanel>
<!-- コマンド実行結果 -->
<TextBox x:Name="CmdResult"
Grid.Row="1"
Margin="10,0,10,10"
Padding="5"
AcceptsReturn="True"
IsReadOnly="True"
FontFamily="BIZ UDGothic" />
ロジックの作成
ipconfig
ボタンのClick
イベント、IpConfigButton_Clickの部分にテキストカーソルを置いてF12
キーを押します。
myButton_Click
の処理は丸ごと削除します。
IpConfigButton_Click
に以下を書きます。
try
{
IpConfigButton.IsEnabled = false;
var psi = new ProcessStartInfo()
{
// 起動するアプリケーション
FileName = "ipconfig.exe",
// コマンドライン引数
Arguments = "/all",
// プロセス用の新しいウィンドウを作成せずにプロセスを起動するか
CreateNoWindow = true,
// プロセスの起動にOSのシェルを使用するかどうか
UseShellExecute = false,
// アプリケーションのテキスト出力を StandardOutput ストリームに書き込むか
RedirectStandardOutput = true,
};
// コマンド実行
Process? cmdProcess = Process.Start(psi);
if (cmdProcess is null)
{
return;
}
// 標準出力読み取り
string? output = await cmdProcess.StandardOutput.ReadToEndAsync();
CmdResult.Text = output;
}
catch (Exception ex)
{
var dlg = new ContentDialog
{
Title = "エラー",
Content = ex.ToString(),
CloseButtonText = "OK",
};
dlg.XamlRoot = Content.XamlRoot;
// エラーメッセージ表示
await dlg.ShowAsync();
}
finally
{
IpConfigButton.IsEnabled = true;
}
IpConfigButton_Click
にasync
を付け足します。
実行
実行してみます。