パワーシェル(PSH)でGUI窓を簡単に使う(GUI基本窓)
1.はじめに
最近はwindowsも複雑化しすぎて世代更新の都度戸惑うばかりです。そこでパワーシェル(PSH)言語を使い「100倍パソコンを快適に使う」を目指して紹介していきます。最初は導入編としてファイルにコピペ貼付して利用するGUI基本窓から簡単にWinコマンドを実行できるPSHアプリを紹介します。
(GUI:Graphical User Interface)
2.GUI窓利用のPSHアプリ
このアプリは[3行のバッチコマンドと17行のパワーシェル]の約20行で構成されるテキストファイルです。そしてこのファイルの「<##VerXXX」行以下にWindowsコマンドを登録して使います(下図の<##Ver以下)。
![]() |
| [図1] GUIパワーシェル窓Winコマンド管理 |
3.利用方法
- windowsメモ帳を使って下記のコピペ[List1.1.1]をテキストファイルに張付けて[ファイル]>[名前を付けて保存]を押下し(図2)ファイル名欄に[winCmd001.bat]を入力し、
文字コードを[ANSI]設定して保存します。 - このファイルをダブルクリックすると上記画面が表示されます。そして画面のコマンド行をダブルクリックするとそのコマンドが起動します。
- マウス[右釦]->[編集]押下でこのファイル[winCmd001.bat]でメモ帳が開きますので登録コマンドを追加して利用します。(上図の右小窓)
4.補足説明
(1)Windows10/11のパソコンを起動し以下手順で[winCmd001.bat]を作成します。- マウス[右釦]->[新規作成]->[テキスト ドキュメント]を押下して[新しいテキスト ドキュメント.txt]を作成する。
- [新しいテキスト ドキュメント.txt]をマウスでダブルクリックし[メモ帳]を開きマウスを使い下記の[List1.1.1]約50行をコピー&ペースト操作で[メモ帳]に貼り付ける。
- [メモ帳]左上の[ファイル]->[名前を付けて保存]押下->[図2]の手順でファイル保存する。右上[X]を押下し終了する。
(2)[winCmd001.bat]をダブルクリックすると下図3のGUI画面が表示され利用可能になります。終了は右上[X]を押下します。利用方法は下図3を参照ください。
(3)[List1.1.1]はマウス[右釦]メニュ版です。また窓上のメニュ版を下記[List1.1.5]に添付しました。必要により使い分けして頂ければ幸いします。
●[図2] メモ帳[名前を付けて保存]画面
ファイル名欄に[winCmd001.bat]を入力し、文字コード[ANSI]設定で[保存]を押下する
[図2] メモ帳[名前を付けて保存]
5.コピペList1.1.1 [winCmd001.bat][GUI基本窓]
★[名前を付けて保存]時、文字コード[ANSI]設定のこと@echo off &if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); $aa=(Cat $fln -Raw); $fdt=$aa.substring($aa.indexof('##'+'STT:')); Iex($fdt+'##>');"
exit; pause&exit;
##
##Ver1.061 2023/1101 by ryu #####################################
##
##STT: ★batファイルでGUI-PSH窓を起動する
##
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ##★GUI
function dbg($cc){ [MessageBox]::Show($cc) }; function dbc($zcc){ Write-Host $zcc; }; ##★DBG
function ssView($bb){ $tBox.Text=$bb.substring( $bb.indexof("`n<"+"##" )); $tBox.SelectionStart=0; $mMain.Text="[1.061]"+$fln; }; ##★表示
##★メイン窓/編集窓の生成 ##★窓寸法(WW,HH) ##★文字種類/寸法 ##★背景色
$mMain =New-Object Form -Pro @{ Size="920,620"; }; $tBox =New-Object TextBox -Pro @{ Font="BIZ UDゴシック,13"; BackColor="#F0F0C0";
Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical; }; $mMain.Controls.Add($tBox);
##★右釦メニュ ##★編集 ##★再表示 ##★クリップ処理 ##★機能追加
$tBox.ContextMenuStrip =$conMenu =New-object ContextMenuStrip -Pro @{ Font="BIZ UDゴシック,12"; };
function ssSetRbtMenu( $zcha ){ $aa=$conMenu.Items.Add( ($zcc =New-Object ToolStripMenuItem) ); $zcc.Text=$zcha; return $zcc; };
(ssSetRbtMenu "編集" ).add_Click({ notepad.exe $fln });
(ssSetRbtMenu "再表示").add_Click({ ssView( Cat $fln -Raw ) });
(ssSetRbtMenu "クリップへ取得").add_Click({ $tBox.Copy() });
(ssSetRbtMenu "クリップを貼付").add_Click({ $tBox.Paste() });
##★マウス[WC]操作 ##★DOS処理 ##★explorer処理 ⇒ ★psh追加⇒★画面設定⇒MainDLG表示 ##★Tool窓起動
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=($tBox.Lines[$ln]-split"##")[0];
if( $zcc.startsWith("> ") ){ $zcc=$zcc.substring(1); if($zcc.contains(" cd ") ){ Iex($zcc) }; Start Cmd -Arg "/k $zcc"; return; };
if( $zcc.startsWith(">> ")){ $zcc=$zcc.substring(2);
if($zcc.contains("explorer ")){;}else{ $zcc=($zcc.replace(" shell:","explorer shell:")).replace(" ms-","explorer ms-"); };
Start -NoN Cmd -Arg "/c $zcc"; };
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.01--by ryu------------------------------------------------------
## Windows Cmd 簡単利用(マウスで行をダブルクリック起動/右釦で編集/再表示)
> Dir c:\ ##[Dos] Dir起動 ・・・・[>]Dos窓利用
> Ver & Date /t ##[Dos] Verとdateの起動
> cd c:\tmp ##[Dos] フォルダ移動([>]のみ)
> Dir ##[Dos] 上記フォルダでDir起動
>> notepad ##[Exe] メモ帳起動・・・[>>]Dos窓無し
>> calc ##[Exe] 電卓
>> SnippingTool ##[Exe] 画面コピー
>> desk.cpl \,3 ##[Dlg] デスプレイのDlg設定
>> ms-settings: ##[Dlg] 設定のDlg窓
>> control ##[Lst] コントロールパネル
>> hdwwiz.cpl ##[Lst] デバイスマネージャ
>> rundll32 shell32,#61 ##[Dlg] ファイル名を指定実行のBOX
>> ms-clock: ##[Dlg] アラーム&クロック
>> shell:AppsFolder ##[Dir] アプリ一覧フォルダ⇒[WC]起動
>> shell:Downloads ##[Dir] ダウンロードのフォルダ
>> shell:::{E2E7934B-DCE5-43C4-9576-7FE4F75E7480} ##[Dlg] 日付と時刻の窓表示
[winCmd001.bat]
![]() |
| [図3] GUI基本窓の起動画面 |
6.アプリ利用説明(アプリ起動後)
(1) 上記画面の各コマンド行をダブルクリックするとそのコマンドが起動します。例、[> Dir C:\ ]行をダブルクリックすると、C:\ のフォルダ内がDOS窓に表示されます。
[>]行はDOS窓を表示し[>>]行はDOS窓を表示しないでコマンドを起動します。
(2) 上記画面はキーボードで自由に編集しダブルクリックで起動可能です。
例、[> Dir C:\tmp]とtmpを追加すれば、tmpフォルダ内が表示されます。編集内容は一時利用のため保存されません。編集内容の保存は(4)項を参照ください。
(3) 画面編集にはマウス[右釦]に[編集][再表示][クリップ取得][クリップ貼付]のメニュー処理があります。
(4) [編集]選択で[winCmd001.bat]が[メモ帳]で開くので編集し保存します。保存後窓画面への反映は[右釦]->[再表示]で行います。
(5) 上記画面コピーはマウス右釦[クリップへ取得]を選択し[メモ帳]右釦[貼り付け]で行います。
[メモ帳]から上記画面へのコピーは[メモ帳]マウス右釦[コピー]から右釦[クリップを貼付]で行います。
(6) [>]行は cdコマンドでフォルダ移動が可能です。([>>]行は不可)
(7)[>>]行は explorer関連コマンドの起動可能です。([>]行は不可)
(8)各行の[##]以降にコメント記載可能です。
7.動作原理の説明
(1) [1~3行目]はバッチファイルでパワーシェルアプリを起動する方法です。ダブルクリックでバッチファイルを起動するとDOS窓(黒窓)が表示されるため1行目で素早くDOS窓を極小化します。2行目でパワーシェルを起動してこのファイルの「##STT:」以下の行を切出しPSHアプリとして起動します。そして3行目でバッチファイルを終了(exit)します。
001: @echo off &if not "%~0"=="%~dp0.\%~nx0" .... ★DOS窓mini化
002: powershell -ExecutionPolicy RemoteSigned.... ★パワーシェル起動
003: exit; pause&exit;...★バッチファイル終了
(2) [using namespace...行] でwindowsフォームのGUI窓モジュール利用を登録し次の行でデバッグ用関数dbg/dbcを登録しその次の行のssView関数で図3画面を表示しています。
009: using namespace System.Windows.Forms;....★GUIの利用
010: function dbg($cc){ [MessageBox]::Show....★DBG関数の登録
011: function ssView($bb){ $tBox.Text=...★画面表示関数の登録
8.コピペList1.1.5 [winCmd051.bat][GUI基本窓(メニュ付き)]
★[名前を付けて保存]時、文字コード[ANSI]設定のこと
![]() |
| [図4] GUI基本窓(メニュ付き) |
@echo off &rem if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); $aa=(Cat $fln -Raw); $fdt=$aa.substring($aa.indexof('##'+'STT:')); Iex($fdt+'##>');"
exit; pause&exit;
##
##Ver1.061 by ryu 2024/1221 #####################################
##STT: ★batファイルでGUI-PSH基本窓を起動(窓メニュ編)
##
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ##★GUI
function dbg($cc){ [MessageBox]::Show($cc) }; function dbc($zcc){ Write-Host $zcc; }; function dbt($cc){ $mMain.Text="[V1.061]"+$cc;} ##★DBG
function MsgYesNo($cc0,$cc1,$cc2){ $cc2="YesNo"; return [MessageBox]::Show($cc1,$cc0,$cc2); };##★YesNo
function ssView($bb){ $tBox.Text=$bb.substring( $bb.indexof("`n<"+"##" )); $tBox.SelectionStart=0; dbt($fln); }; ##★表示
##★メイン窓/編集窓の生成 ##★窓寸法(WW,HH) ##★文字種類/寸法 ##★背景色
$mMain =New-Object Form -Pro @{ Size="920,620"; }; $szFont="BIZ UDゴシック"; $tBox =New-Object TextBox -Pro @{ Font="$szFont,13"; BackColor="#F0F0C0";
Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical; }; $mMain.Controls.Add($tBox);
$mMain.MainMenuStrip =$dListMenu =New-Object MenuStrip -Pro @{ Font="$szFont,12"; }; $mMain.Controls.Add($dListMenu);
function ssDMnMenu($zcc){ $zmm=New-Object ToolStripMenuItem; $zmm.Text=$zcc; $dListMenu.Items.AddRange($zmm); $global:szMnBas=$zmm; return $zmm;}
function ssDMnMSet($zcc){ $zmm=New-Object ToolStripMenuItem; $zmm.Text=$zcc; $szMnBas.DropDownItems.AddRange($zmm); $global:szMnBas2=$zmm; return $zmm;}
(ssDMnMenu "[反映]").add_Click({ dbg "[反映保存]`n`n$fln`n[bak]`n$fln.bak"; $zcc=Cat $fln -Raw; SC ($fln+".bak") $zcc -Force;
SC $fln ($zcc.substring(0,$zcc.indexof("`n<#"+"#V"))+$tBox.Text) -Force; }); (ssDMnMenu "[編集]").add_Click({ notepad $fln });
(ssDMnMenu "[bak]").add_Click({ notepad ($fln+".bak") }); (ssDMnMenu "[Help]").add_Click({ Start "https://ryupapa008.blogspot.com/2024/08/guiwin.html#_List1.1.5" });
##★マウス[WC]操作 ##★DOS処理 ##★explorer処理 ⇒ ★psh追加⇒★画面設定⇒MainDLG表示 ##★Tool窓起動
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=($tBox.Lines[$ln]-split"##")[0];
if( $zcc.startsWith("> ") ){ $zcc=$zcc.substring(1); if($zcc.contains(" cd ") ){ Iex($zcc) }; Start Cmd -Arg "/k $zcc"; return; };
if( $zcc.startsWith(">> ")){ $zcc=$zcc.substring(2);
if($zcc.contains("explorer ")){;}else{ $zcc=($zcc.replace(" shell:","explorer shell:")).replace(" ms-","explorer ms-"); };
Start -NoN Cmd -Arg "/c $zcc"; };
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; }; ssView($fdt); $mMain.ShowDialog();
<##Ver1.01--by ryu------------------------------------------------------
## Windows Cmd 利用(行をダブルクリック起動)
> Dir c:\ ##[Dos] Dir起動 ・・・・[>]Dos窓利用
> Ver & Date /t ##[Dos] Verとdateの起動
> cd c:\tmp ##[Dos] フォルダ移動([>]のみ)
> Dir ##[Dos] 上記フォルダでDir起動
>> notepad ##[Exe] メモ帳起動・・・[>>]Dos窓無し
>> calc ##[Exe] 電卓
>> desk.cpl \,3 ##[Dlg] デスプレイのDlg設定
>> ms-settings: ##[Dlg] 設定のDlg窓
>> control ##[Lst] コントロールパネル
>> hdwwiz.cpl ##[Lst] デバイスマネージャ
>> rundll32 shell32,#61 ##[Dlg] ファイル名を指定実行のBOX
>> ms-clock: ##[Dlg] アラーム&クロック
>> shell:AppsFolder ##[Dir] アプリ一覧フォルダ⇒[WC]起動
>> shell:Downloads ##[Dir] ダウンロードのフォルダ


