●シンプルでスマートなssPSHメモ帳とは
◎GUIパワーシェル導入編の基本原理を使ったアプリで「1つのファイルでダブルクリック動作」するシンプルなメモ帳のことです。現在次の2種類がありこの記事ではパワーアップ版を記載します。PC快適利用に向けスマートにカスタマイズ対応して利用頂ければ幸いします。- [ssPshMemo.bat]..基本版は参考サイトに掲載 ([コピペ gui] で検索)
- [ssPshMemoPup.bat]..パワーアップ版(今回)..修正V1.51
<戻る 進む>
◎この記事の目的
応用編のPSHメモ帳[V2.05]は大変便利になった一方でソースが複雑になりカスタマイズにはそれなりのPSH技術が必要となりました。そのため実践編に入る前にGUIパワーシェルの基本原理をベースにしたパワーアップ版ssPSHメモ帳を紹介します(PSHメモ帳の基本機能を搭載し基本編[List2.6.2][List2.6.3]など動作可能です)。
応用編のPSHメモ帳[V2.05]は大変便利になった一方でソースが複雑になりカスタマイズにはそれなりのPSH技術が必要となりました。そのため実践編に入る前にGUIパワーシェルの基本原理をベースにしたパワーアップ版ssPSHメモ帳を紹介します(PSHメモ帳の基本機能を搭載し基本編[List2.6.2][List2.6.3]など動作可能です)。
★注意:ssPSHメモ帳の動作確認は十分対応していますが、問題が発生した場合、自己責任での対応でお願い致します。
●パワーアップ版の作成と起動画面
◎Windowsメモ帳を使って添付リスト[List2.5.1]をコピペ操作でテキストファイルに張付け、保存ファイル名を[ssPshMemoPup.bat]と入力してANSIコード設定で保存します。
そしてそのファイルをダブルクリックで次の画面が表示されます。★[ANSI]コード設定を確認ください。
そしてそのファイルをダブルクリックで次の画面が表示されます。★[ANSI]コード設定を確認ください。
[List2.5.1] --> [ssPshMemoPup.bat]
![]() |
ssPSHパワーアップ版の起動画面(操作説明) |
●アプリ処理の機能説明
◎起動画面に[TopPage]の概要説明を表示します。また利用に合わせて編集利用ください。下記の【〇】は基本版の機能で【◎】はパワーアップ版の追加機能です。
- 〇1行目: @BakColor:#FFF2E4 @FntSize:11..ファイル1行目に背景色と文字寸法を設定できます。
- 〇ファイル:[保存]:[Winメモ帳]:[UTF8->ANSI]は「●メニューの機能説明」を参照ください。
- 〇[ドラッグ&ドロップ]: テキストファイル(txt)を窓へドラッグ&ドロップすると読取り表示します。またPSHファイル(ps1)をドラッグ&ドロップするとPSH起動実行します。
- 〇[!Web名称; https:XXXXX]行の登録でダブルクリックするとWebサイトを表示します。またurlアドレスに日本語文字も可能です。
!Yahooサイト; https://www.yahoo.co.jp/
- ◎[Dir/File:ダブルクリック]でWindows設定内容で起動します。また[##]右行でコメントを記載可能です。
test.txt ##テストファイル
bak ##バックアップフォルダ
- ◎[> ]行の指定: Dos-CmdやWindows-Cmdをダブルクリック実行します。
- ◎[>> ]行の指定: Dos窓(黒い小窓)表示無しで同上を実行します。
- ◎[> cd Dir]行の指定: フォルダ移動します。
> Ver & Date /t ##[WC] Verとdateの起動
> cd c:\tmp ##[WC] フォルダ移動([>]のみ)
>> ms-settings: ##[WC] Win設定窓
- ◎[& ]行の指定: PSHコマンドをダブルクリック実行します。
- ◎[&& ]行の指定: PSH窓(紺色小窓)無しで同上を実行します。
- ◎[&&& ]行の指定: このアプリプログラムの一部として同上を実行します。そのためdbg/dbc関数やglobal変数など一式利用可能です。
- ◎[;]行の指定: [&]行に複数連結して[&]、[&&]、[&&&]の夫々PSH処理を実行します。連続行は最大300行です。下図[&]行の例の場合、3行を連結しPSH処理します。
& Dir c:\ ##[WC] Dir起動
&& calc ##[WC] 電卓:窓無し
&&& $global:aaa=10; dbg $aaa; ##[WC] S1:継続:global変数に代入
& for($ii=0; $ii -lt 10; $ii++ ){ ##[WC]連結実行
; $dd = $ii * 2; "Data = $dd です";
; };
- ◎[TopPage]反映..この釦押下で[TopPage]の表示編集内容を[ssPshMemoPup.bat]内の[TopPage]内容に入替えてファイル保存します。
- ◎メニュー[TopPage]..[ssPshMemoPup.bat]を再度読込み[TopPage]内容を表示します。
- ◎[&FSet& テキストファイル名]指定でダブルクリックでssPSHメモ帳にファイル読取します。
&FSet& TextFile.txt ##PSH短文コマンドファイル
●メニューの機能説明
◎[ファイル]
◎マウス右釦の機能
★2025/0102:1.501: ssFileSet()修正(ANSIとUTFが逆)..失礼しました。(補足:基本版はOKです)
- File読取[窓]..Windowsファイル読取窓からファイル読取りする
- File保存[窓]..Windowsファイル保存窓からファイル保存する。
- [TopPage]反映..このアプリ起動の最初の画面を表示する。
- [<bat編集>]..このアプリソースをWindowsメモ帳で編集する。
◎[保存]..表示ファイルのバックアップ保存の確認画面が表示される
- [Y]...[bak]フォルダに[$$bak_ファイル名.txt]でバックアップ後、上書き保存する。
- [N]...上書き保存のみする。
- [キャンセル]...保存しないで戻る。
◎[Winメモ帳]..表示ファイルでWindows設定の機能で動作する。
◎[UTF8->ANSI]..UTF8コード表示ファイルをANSI変換表示して確認画面を表示する。
- [Y]..変換内容で窓表示する。
- [N]..変換内容をキャンセルして元に戻し表示する。
◎メニュー
- [TopPage]
- 背景色サイト表示..背景色ページ画面を表示する。
- 機能説明サイト表示..このサイトのこの画面を表示する。
- 年/月/日(曜日)..
- Dir/File取得..
◎[explorer]..現在のフォルダ位置でexplorerを起動する。
◎[右端切替]..行の右端の折返しON/OFF切替する。
◎マウス右釦の機能
- [元に戻す]..直近の編集オペ操作を元に戻す。
- [切り取り]..マウス指定文字列を切り取りクリップボードへコピーする。
- [コピー]..マウス指定文字列をクリップボードへコピーする。
- [張付け]..クリップボードをマウス指定位置へコピーする。。
●コピーリスト
こぴぺ[List2.5.1] --> [ssPshMemoPup.bat]★2025/0102:1.501: ssFileSet()修正(ANSIとUTFが逆)..失礼しました。(補足:基本版はOKです)
if($zmd-eq 1){ $zcc=Cat $zfl
-Encoding UTF8 -Raw;}else{$zcc=Cat $zfl -Raw;};@echo off &rem if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -Exe RemoteSigned "$fln=(echo %0); $bb=(Cat $fln -Raw); $fdt=$bb.substring($bb.indexof('##'+'STT:')); Iex($fdt+'##>');"
exit; pause&exit;
##STT:[Ver1.51]●●シンプル[ssPSHメモ帳Pup(パワーアップ版)] by ryu 2024/1006
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ##★GUI
function dbg($cc){[MessageBox]::Show($cc)}; function dbc($cc){Write-Host $cc;}; function dbt($cc){ssViewColor; $mMain.Text="[V1.51]ssPSHメモ帳Pup "+$cc;};##★DBG
function MsgYesNo($cc0,$cc1,$cc2){ if($cc2-eq $null){$cc2="YesNo"}; return [MessageBox]::Show($cc1,$cc0,$cc2); };##★YesNo
$szFont="BIZ UDゴシック"; $global:szFile=""; $szDir=(pwd); $szGuiPshUrl='https://ryupapa008.blogspot.com';
$szRtfMemo=".\sys\wPshRtfMemo501.ps1";
##
##★メイン窓の生成 ★編集窓の生成 ★FileRead/SaveDLGの登録 ★窓メニュの生成 ★メニュ関数登録 ★各メニュ登録(ファイル/保存/Winメモ帳/UTF8/メニュ)
$mMain =New-Object Form -Pro @{ Size="1080,720"; }; $tBox =New-Object TextBox -Pro @{ Font="$szFont,13"; BackColor="#e0ffc1"; Dock="Fill";
Multiline=$true; AcceptsTab=$true; AcceptsReturn=$true; AllowDrop=$true; ScrollBars=[ScrollBars]::Both; }; $mMain.Controls.Add($tBox);
$dReadBox =New-Object OpenFileDialog -Pro @{ Title="【読取】ファイル選択"; Filter='txtファイル|*.txt;*.ps1|全て(*.*)|*.*'; InitialDirectory=$szDir;};
$dSaveBox =New-Object SaveFileDialog -Pro @{ Title="【保存】ファイル設定"; Filter='txtファイル|*.txt;*.ps1|全て(*.*)|*.*'; InitialDirectory=$szDir;};
$dListMenu=New-Object MenuStrip -Pro @{ Font="$szFont,12"; }; $mMain.MainMenuStrip=$dListMenu; $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;}
$szMenu1=ssDMnMenu "ファイル"; (ssDMnMSet "File読取[窓]").add_Click({ if( $dReadBox.ShowDialog()-eq "OK" ){ $aa=(ssFileSet $dReadBox.FileName 0) }; });
(ssDMnMSet "File保存[窓]").add_Click({ ssFileSave 1 $szFile });
(ssDMnMSet "[TopPage]反映").add_Click({ if( ($szFile -eq "" )-and ( (MsgYesNo "[TopPage]をFileへ反映保存(Y/N)" $fln) -eq "Yes") ){
$zcc=Cat $fln -Raw; SC ($fln+".bak") $zcc -Force; SC $fln ($zcc.substring(0,$zcc.indexof('<#'+'#['))+$tBox.Text) -Force; }; ssViewColor; });
(ssDMnMSet "[<bat編集>]").add_Click({ Iex("notepad.exe $fln") });
(ssDMnMenu "[保存]").add_Click({ ssFileSave 0 $szFile }); (ssDMnMenu "[Winメモ帳]").add_Click({ Iex("notepad.exe $szFile");});
(ssDMnMenu "[UTF8->ANSI]").add_Click({ if((ssFileSet $szFile 1)-ne 0){return;}; if((MsgYesNo "注:UTF8->ANSI変換OKですか?(Y/N)" $szFile)-eq "No"){ssFileSet $szFile 0}; });
$szMenu5=ssDMnMenu "メニュ-"; (ssDMnMSet "[TopPage]" ).add_Click({ $fdt=(Cat $fln -Raw); ssTopPage $fdt; });
(ssDMnMSet "背景色サイト表示").add_Click({ start "$szGuiPshUrl/p/blog-page_6.html" }); (ssDMnMSet "Help説明サイト表示").add_Click({ start "$szGuiPshUrl/2024/12/sspsh25.html";});
(ssDMnMSet "Dir/File取得" ).add_Click({ $tBox.SelectedText=((dir -name)-join "`r`n")+"`r`n" }); ##★★追加
(ssDMnMSet "[yyyy/MM/dd取得]").add_Click({ $tBox.SelectedText=Get-date -Format "yyyy/MM/dd(ddd)"; });
(ssDMnMenu "[explorer]").add_Click({ explorer (pwd) }); ##★★追加
(ssDMnMenu "[右端切替]").add_Click({ if( $tBox.WordWrap ){$tBox.WordWrap=$false;}else{$tBox.WordWrap=$true;}; });
##$szGuiPshUrl='https://ryupapa008.blogspot.com/';p/blog-page_6.html';
##★マウス右釦メニュの生成/関数登録/メニュ登録 ★クリップ処理 ★ダブルクリック ★ドラッグ&ドロップ
$tBox.ContextMenuStrip =$global:conMenu =New-object ContextMenuStrip -Pro @{ Font="$szFont,12"; };
function ssRbtMenu($zcha){ $aa=$conMenu.Items.Add(($ccc=New-Object ToolStripMenuItem)); $ccc.Text=$zcha; $global:zzSrp=$ccc;return $ccc; };
(ssRbtMenu "[元に戻す]").add_Click({$tBox.Undo()}); (ssRbtMenu "[切り取り]").add_Click({$tBox.Cut()});
(ssRbtMenu "[コピー]").add_Click({$tBox.Copy()}); (ssRbtMenu "[貼付け]").add_Click({$tBox.Paste()});
##
##★マウス[WC]/[Ctl+n]操作 ★[>][>>]DOS処理 ★[!][http]Web ★[Dir/File] ★[&]行連結 ★[&&&] ★[&FSet&] ★[&] ★[&&] ★機能追加File
$tBox.Add_DoubleClick({ssWCAct 0 }); $tBox.Add_KeyDown({ if($_.Control){;}else{return;}; switch($_.KeyCode){ "n" { ssWCAct 1;} }; });
function ssWCAct($zcmd){ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1;
$zcc=(($tBox.Lines[$ln]-split"##")[0]).trim()+" "; if( $zcc.length -le 3){ return; };
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";return; };
if( $zcc.startsWith("&") ){;}else{ $zcc=$zcc.trim(); if( Test-Path $zcc -PathType Container ){ explorer $zcc; return; };
if( ($zcc.startsWith("http"))-or ($zcc.startsWith("!") -and $zcc.contains("http")) ){
if($zcc.startsWith("!")){ $zcc=($zcc.split(";"))[1]; }; $zcc=($zcc.replace("`'","")).trim(); Iex("Start `'$zcc`'"); return; };
if( Test-Path $zcc ){ if( $zcc.endswith('.rtf') ){ ssRtfMemo $zcc }else{ Start -NoN Cmd -Arg "/c `"$zcc`""; }; return; }; return; };
for( $ii=1; $ii -lt 300; $ii++ ){ $cc=$tBox.Lines[$ln+$ii]; if($cc -eq $null){ break; };
if( $cc.startsWith(";") ){ $zcc+="`n"+($cc.substring(1)).trim(); }else{ if( $cc.startsWith("#") ){ continue;}; break; }; };
if( $zcc.startsWith("&&& ")){ $zcc=$zcc.substring(3); $tBox.SelectionStart+=4; Iex($zcc); return; };
if( $zcc.startsWith("&FSet&")){ $zcc=$zcc.substring(6).trim(); Iex("ssFileSet `"$zcc`""); return; };
if( $zcc.startsWith("& ") ){ ssPshAct 0 ($zcc.substring(1).trim()); return; };
if( $zcc.startsWith("&& ") ){ ssPshAct 1 ($zcc.substring(2).trim()); return; }; (ssWClkCmd $ln $zcc); ##★ssWC追加対応
};
##★PSH短文起動(0:窓あり/1:無し) ★ssWC追加対応 ★add機能追加 ★Rtfメモ帳対応 ★ドラッグ&ドロップ登録
function ssPshAct($zcmd,$zcc){ $zcc=$zcc.replace('"','\"'); if($zcmd-eq 0){ Start powershell -Arg "-noe $zcc";}else{ Start -NoN powershell -Arg "$zcc"; }; };
function global:ssWClkCmd($ln,$zcc){;}; $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; };
function global:ssRtfMemo($zfl){ if(Test-Path $szRtfMemo){ Start -NoN powershell -Arg "-noe $szRtfMemo `'$zfl`'"; }else{ Start -NoN Cmd -Arg "/c `"$zfl`""; }; };
$tBox.Add_DragEnter({$_.Effect ="All";}); $tBox.Add_DragDrop({ $zcc=@(([DataObject]$_.Data).GetData("FileDrop")); if(Test-Path $zcc ){;}else{ return; };
if($zcc.endsWith(".ps1") ){ Start powershell -Arg "-noe $zcc"; }else{ ssFileSet $zcc; }; });
##
##★ファイル読取&表示 ★背景色 ★FNT寸法 ★File保存(bak保存選択)
function ssFileSet($zfl,$zmd){ if(($zfl -ne $null)-and( $zfl.endswith('.txt')-or $zfl.endswith('.ps1')-or $zfl.endswith('.rtf')) ){
if($zfl.endswith('.rtf')){ ssRtfMemo $zfl; return; }; }else{dbg "No File.txt`n$zfl";return 1; };
if(Test-Path $zfl){ $global:szFile=$zfl; if($zmd-eq 1){ $zcc=Cat $zfl -Encoding UTF8 -Raw;}else{$zcc=Cat $zfl -Raw;}; $tBox.Text=$zcc; dbt("[読取] $szFile");}else{ $global:szFile=$zfl; dbt("[新規] $szFile"); }; $tBox.SelectionStart=0; return 0;
};
function ssViewColor(){ $zcc=($tBox.Lines[0]).replace(" ","").split("@:"); for( $ii=0; $ii -lt $zcc.count; $ii++ ){ $cc=$zcc[$ii]; $cc1=$zcc[$ii+1];
if($cc.StartsWith("BakColor")){$tBox.BackColor=$cc1;}; if($cc.StartsWith("FntSize")){$global:szFntSize=$cc1; $tBox.Font="$szFont,$cc1";}; };
};
function global:ssFileSave($zcmd,$zfl){ if($zfl -ne ""){ $dSaveBox.InitialDirectory=(Split-Path $zfl -Parent); $dSaveBox.FileName=(Split-Path $zfl -Leaf); };
if( $zcmd -eq 1 ){ if( $dSaveBox.ShowDialog() -ne "OK" ){ return; }; $zfl=$dSaveBox.FileName; if($zfl -eq ""){ return;}; }
else{ if( ($zfl -eq "")-or(($cc=MsgYesNo "[注【ANSI】で上書き保存します (BackUP:Y/N)] or [キャンセル]" $zfl "YesNoCancel" ) -eq "Cancel" ) ){ return; }; };
if( ($cc -eq "Yes")-and (Test-Path $zfl) ){ if(Test-Path "bak" -PathType Container){;}else{ New-Item "bak" -ItemType Directory };
$zfl2="bak_"+(Split-Path $zfl -Leaf); Copy-Item $zfl "bak\`$`$$zfl2" -Force; };
$global:szFile=$zfl; SC $zfl ($tBox.Text); dbt("[保存] $zfl");
};
##★窓表示
function global:ssTopPage($zdt){ $tBox.Text=$zdt.substring( $zdt.indexof("`n<"+"##[" )+1); $tBox.SelectionStart=0; ssViewColor; $global:szFile=""; dbt("[File無し]"); };
ssTopPage $fdt; $mMain.ShowDialog();
##★起動時の説明-------------------------------------------------------------------
<##[説明] @BakColor:#FFF2E4 @FntSize:11
〇ファイル:[読取窓/保存窓/bat編集] 〇[保存]:表示Fileの保存->BakUP保存[Y/N][キャンセル]確認
〇[Winメモ帳]:Winメモ帳で開く 〇[UTF8->ANSI]:表示FileをUTF8->ANSI変換表示->OK[Y/N]確認
〇[ドラッグ&ドロップ]txtファイル表示又はps1ファイル起動 〇1行目に背景色/文字寸法設定可能
〇[!Web名称; https:XXXXX]行のダブルクリックでWeb表示(例)
!Yahooサイト; https://www.yahoo.co.jp/
##[追加]
◎[explorer],[Dir/File名取得],[Dir/File:ダブルクリック]で起動,[##]右行コメント
test.txt ##テストファイル
bak ##バックアップフォルダ
◎[>][>>][&][&&][&&&][;]行のCMD実行,PSH処理実行,[TopPage]処理,[&FSet&]処理
> Ver & Date /t ##[WC] Verとdateの起動
> cd c:\tmp ##[WC] フォルダ移動([>]のみ)
>> ms-settings: ##[WC] Win設定窓
& Dir c:\ ##[WC] Dir起動
&& calc ##[WC] 電卓:窓無し
&&& $global:aaa=10; dbg $aaa; ##[WC] S1:継続:global変数に代入
& for($ii=0; $ii -lt 10; $ii++ ){ ##[WC]連結実行
; $dd = $ii * 2; "Data = $dd です";
; };
◎機能追加[add]とrtfメモ帳への対応