PowerShellからWindows Formsのダイアログを作成し、高DPIディスプレイでも文字やボタンが見切れにくい画面配置を学ぶためのサンプル集です。
各サンプルは1ファイルで実行できます。外部PowerShellモジュールやVisual Studioは不要です。
- 96 DPIを設計時の基準として
AutoScaleDimensionsを設定 AutoScaleMode = Dpiによる自動スケーリング- 固定の巨大なピクセルフォントをやめ、Windowsのダイアログ用フォントを使用
TableLayoutPanelとFlowLayoutPanelを使い、DPIや文字サイズが変わっても部品を再配置ClientSizeとMinimumSizeを使用し、フォーム外にボタンが出ないように修正- OK/キャンセル、Enter/Escの標準的なダイアログ操作に対応
- フォームとフォントを
finallyで確実に破棄
- Windows
- Windows PowerShell 5.1、またはWindows上のPowerShell 7
- .NETの
System.Windows.FormsとSystem.Drawing
Windows Formsを使用するため、macOSとLinuxでは動作しません。
| ファイル | 内容 | OKを押したときの出力 |
|---|---|---|
HiDPICustomGraphicalInputBoxSample.ps1 |
文字入力ダイアログ | 入力した文字列 |
HiDPIGraphicalDatePickerSample.ps1 |
カレンダー形式の日付選択 | 選択したDateTime値 |
HiDPIMultiple-selectionListBoxesSample.ps1 |
リストから複数選択 | 選択した項目の配列 |
HiDPISelectingItemsFromListBoxSample.ps1 |
リストから1つ選択 | 選択した項目 |
PowerShellでリポジトリのフォルダーへ移動し、実行するファイルを指定します。
Set-Location .\PowerShell_HiDPI_GUI_Sample
.\HiDPICustomGraphicalInputBoxSample.ps1他の例:
$selectedDate = .\HiDPIGraphicalDatePickerSample.ps1
$selectedItems = .\HiDPIMultiple-selectionListBoxesSample.ps1
$selectedComputer = .\HiDPISelectingItemsFromListBoxSample.ps1キャンセルした場合は値を出力しません。
まず、現在の設定を確認します。
Get-ExecutionPolicy -List組織管理のPCでは管理者の方針に従ってください。このリポジトリのサンプルは実行ポリシーを自動変更しません。
$form.AutoScaleDimensions = [System.Drawing.SizeF]::new(96.0, 96.0)
$form.AutoScaleMode = [System.Windows.Forms.AutoScaleMode]::Dpi96 DPIはWindows Forms上の設計基準です。実行時のDPIが異なる場合、Windows Formsがフォームと子コントロールの拡大率を計算します。
高DPI環境では、文字だけが大きくなってボタンや入力欄と重なることがあります。このサンプルでは、行と列で配置するTableLayoutPanelと、ボタンを順番に並べるFlowLayoutPanelを使っています。
$uiFont = [System.Drawing.SystemFonts]::MessageBoxFont.Clone()
$form.Font = $uiFont現在のWindows設定に合うダイアログ用フォントを使用します。個別に大きなフォントが必要な場合も、レイアウトパネルやAutoSizeと組み合わせてください。
- サンプルはWindows Forms向けであり、WPF/XAMLのDPI処理とは異なります。
- PowerShellスクリプト単体では、通常の
.exeアプリと同じ方法でDPI Awarenessマニフェストを埋め込めません。 - 複数の異なるDPIのモニター間を移動する挙動は、PowerShellと.NETのバージョン、Windowsの設定によって異なる場合があります。
- GUIの実表示はWindows環境で確認する必要があります。
Windows上で実行していることを確認してください。PowerShell 7を使う場合も、Windows版が必要です。
Windowsの「設定」→「システム」→「ディスプレイ」で拡大率を確認してください。100%、125%、150%、200%など複数の拡大率で確認すると違いを把握しやすくなります。
標準出力を変数へ代入します。
$value = .\HiDPICustomGraphicalInputBoxSample.ps1- Windows Forms - Automatic scaling
- ContainerControl.AutoScaleDimensions
- ContainerControl.AutoScaleMode
- Creating a custom input box
- Creating a graphical date picker
Standalone PowerShell/Windows Forms examples that demonstrate DPI-based automatic scaling, system dialog fonts, responsive layout panels, standard dialog behavior, and deterministic cleanup.