コピペで簡単カスタマイズして自分メモ帳でＰＣを快適に使う（ＧＵＩパワーシェル利用）

## 1.はじめに
Windowsも多機能しすぎて自分でカスタマイズできるアプリがあればもっと快適利用できると思いませんか？
そこで変換アプリ作成に合わせて、コピペで使う簡単「ssPSHメモ帳」を作成したので紹介します。プログラミング入門の初心者もメモ帳操作とコピペ張付けが出来れば利用可能ですのでチャレンジしてみてください。
## 2.概要説明
Windowsメモ帳でパワーシェルを扱うとANSI設定が手間です。そこで[UTF->ANSI変換アプリ]作成中に簡単メモ帳へのグレードアップをしたいと思い作成しました。私個人の思いとしては究極のssPSHメモ帳に完成したと思います。コピペでご利用頂くと幸いいたします。
★注:アプリ動作確認は十分していますが、何か問題が発生した場合は自己責任での対応でお願いいたします。
このssPSHメモ帳を究極としたのは次の５つのプログラミング技法の観点からです。
#### (1)コピペだけの完全ダウンロード無しで利用可能(初心者も利用可能)：
このアプリは次の「コピーリスト１」約50行をテキストファイルに張り付けて利用するので何かをダウンロードしたり起動したりする必要が無く誰でも簡単に利用可能です。(Windows10利用にて)
#### (2)オペ操作が簡単：
このアプリはコピペファイル[ssPshmemo.bat]のダブルクリックで起動し、アプリ操作は「GUIウインドウ、マウス、ダブルクリック、ドラッグ＆ドロップ」で簡単利用できます。
#### (3)簡単にカスタマイズ＆パワーアップ改善：
少しパワーシェルの学習は必要ですがメモ帳の基本機能を組込み済みで、[ﾌｧｲﾙ]->[bat編集]で簡単にアプリ編集が可能です。
カスタム事例を「コピーリスト２」に記載します。また[パワーアップ事例のサイト](https://ryupapa008.blogspot.com/2024/12/sspsh25.html)、そして[グレードアップ事例のサイト](https://ryupapa008.blogspot.com/2024/09/pshguipsh.html)を記載しますのでよろしければご参考にしてください。
#### (4)オペ操作の利用環境に配慮：
約50行のアプリですが利用テキストファイルの環境に合わせ「背景色／文字寸法」の設定が出来ます。
また安全性の観点から「ファイル保存時のバックアップ保存有り/無し/キャンセル確認」「ANSI変換OK/NG確認」のオペ操作の確認画面機能があります。カスタマイズ時の機能追加においてもオペ操作の確認画面を簡単に組込めます。
#### (5)カスタマイズのDBG環境に配慮：
このアプリはカスタマイズ時のデバッグ方法とデバッグツールについて十分考えられています。デバッグモードとして「コピーリスト２」はDOS窓(黒い画面)表示に設定しプログラム作成エラー情報を表示します。また、論理エラー確認ツールとして「dbg "\\$aa" 関数(変数表示＆一時停止)」「dbc "\\$bb" 関数(変数表示＆継続起動)」を搭載します。よって、プログラムの確認したい箇所に記載して論理動作確認が可能です。

## 3.事前準備
　それでは【マウス右ボタン⇒[新規作成]⇒テキストドキュメント】押下して新規ファイルを作成し、[新しいテキスト ドキュメント.txt] をダブルクリックしメモ帳を起動ください。
　次に下記の「コピーリスト１」をメモ帳にコピー＆ペーストして貼り付けます。
そして、メモ帳の左上[ファイル]⇒[名前を付けて保存]⇒ファイル名[ssPshMemo.bat]を入力し⇒文字コード[ANSI]に設定して[保存]を押下した後、メモ帳を終了します。
★注：文字コード欄が[ANSI]設定であることを確認してください。
　あとは[ssPshMemo.bat] をダブルクリックすると下図の窓が開きます。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628574/351d6cdf-bd13-1597-c65e-784531d390f0.png)

## 4.利用方法
#### (1)アプリ起動とテキストファイル読取り
ssPshMemo.bat をダブルクリックすると起動しオペ操作機能の説明(上図)を表示します。
そして利用テキストファイル(.txt)をドラッグし画面にドロップすると表示されます。
なお「変な文字」を表示しているときは「UTF8コード」などのファイルです。
「ANSI」変換しても可能なファイルなら[UTF8->ANSI]釦を押下します。「正常文字」が表示されたら確認画面[Y]を押下します。継続して「変な文字」のときは[N]を押下ください。元に戻りますのでそのファイルは利用しないでください。(ANSI変換できないファイルのため)
★注意：[保存]釦を押下しない状態ではファイルは前のままでANSI変換されません。
[保存]->[保存確認(Y/N/ｷﾔﾝｾﾙ)]で、[Y]or[N]を押下すると上書き変換されますのでANSI変換可能なファイルのみ操作ください。なおANSI変換後もWindowsメモ帳でそのファイルは利用可能です。UTF8に戻すときはWindowsメモ帳[名前を付けて保存]->[UTF8]->[保存]で変換ください。
#### (2)テキストファイルの読取りと保存
◎上記操作とは別に[ﾌｧｲﾙ]->[File読取]の[Windows読取]画面からファイルを読取り可能です。この場合はPS1ファイルも読取り可能です。
◎ファイル保存時は[保存]釦を押下->[保存確認(BaK_Y/N)(ｷﾔﾝｾﾙ)]画面表示のとき、[Y]押下でバックアップファイルを作成して上書き保存します。[N]押下では上書き保存のみ処理します。[ｷﾔﾝｾﾙ]押下では保存しないで終了します。
◎バックアップ保存フォルダはこのアプリのあるフォルダに[bak]フォルダを作成して[$$BAK_ファイル名.txt]で保存します。
★注意：[ﾌｧｲﾙ]->[File保存]の[Windows保存]画面から保存するときはファイル保存のみです。バックアップファイルは保存されません。
#### (3)新規ファイルの作成
アプリ画面に新規ファイルのデータを編集後、[ﾌｧｲﾙ]->[File保存]の画面で新規ファイル名を入れて保存します。
#### (4)背景色と文字寸法の設定など
◎利用テキストファイルの１行目に次の背景色と文字寸法が設定できます。[保存]->確認[Y/N]で反映されます。
[  \@BakColor:#E0FFE0   \@FntSize:12  ]
なお背景色のコードは「#123456」[#]＋[16進コードの６文字] です。よろしければ[参考サイト](https://ryupapa008.blogspot.com/p/blog-page_6.html)を参照ください。注: [ﾒﾆｭｰ]->[背景色ｻｲﾄ表示]からも同サイトを表示します。必要によりアプリ設定ください。
◎パワーシェルファイル(.ps1)をドラッグ＆ドロップするとPSH窓(紺色窓)表示モードでパワーシェルアプリを起動可能です。
◎このアプリは[!Web名称; https:XXXXX]行のﾀﾞﾌﾞﾙｸﾘｯｸでWeb表示可能です。
!Yahooサイト;   https://www.yahoo.co.jp/

## 5.簡単カスタマイズの例（デバッグモード:DOS画面設定)
(1)次の画面の「◎追加」機能をカスタマイズした例「コピーリスト２」を記載します。
[新しいテキスト ドキュメント.txt] をダブルクリックしコピペしてファイル名[ssPshMemo2.bat]にて動作確認してみてください。（ANSI設定のこと）
(2)プログラム内では[##★★追加]の行を追加しています。(３行追加)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628574/17000c87-febd-1837-76e7-236420dfe1bd.png)

(2)デバッグモードの設定は、プログラムの１行目[&]の次に[rem]を設定と3行目にpauseを追加します。(下記参照)
```
@echo off & if not..... -->  @echo off &rem if not..... 
powershell ....
exit;  --> pause&exit;
```

## 6.コピーリスト
＜コピーリスト１＞[ssPshメモ帳]基本リスト
　2024/1111: 3行目修正：pause&exit; -> exit; 
```
@echo off &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;
##STT:[Ver1.05]●●シンプル[ssPSHメモ帳(ANSI)] 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.05]ssPSHメモ帳 "+$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); $szColorUrl='https://ryupapa008.blogspot.com/p/blog-page_6.html'
##
##★メイン窓の生成　★編集窓の生成  ★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 "[<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 "背景色ｻｲﾄ表示").add_Click({ start $szColorUrl;}); (ssDMnMSet "[---]").add_Click({;}); (ssDMnMSet "[---]").add_Click({;});
##
##★マウス処理：　★右釦メニュの生成/関数登録/メニュ登録  ★ｸﾘｯﾌﾟ処理   ★ダブルクリック  ★ドラッグ＆ドロップ
$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.Copy()});
  (ssRbtMenu "[切り取り]").add_Click({$tBox.Cut()}); (ssRbtMenu "[貼付け]").add_Click({$tBox.Paste()});
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=$tBox.Lines[$ln].trim(); if( $zcc.length -le 2){return; };
  if( $zcc.startsWith("!")-and $zcc.contains("http") ){ $zcc=$zcc.replace("`'",""); Iex("Start `'"+(($zcc.split(";"))[1]).trim()+"`'");return; };
});
$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{ $aa=(ssFileSet $zcc 0); };
});
##★ファイル読取＆表示  ★背景色  ★FNT寸法  ★File保存(bak保存選択)
function ssFileSet($zfl,$zmd){ if(($zfl -ne $null)-and( $zfl.endswith('.txt') -or $zfl.endswith('.ps1')) ){;}else{dbg "No File.txt`n$zfl";return 1; };
  if(Test-Path $zfl){ $global:szFile=$zfl; if($zmd-eq 0){ $zcc=Cat $zfl -Raw;}else{$zcc=Cat $zfl -Encoding UTF8 -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");
};
##★窓表示
$tBox.Text=$fdt.substring( $fdt.indexof("`n<"+"##" )+1); $tBox.SelectionStart=$tBox.Text.length; dbt("[File無し]"); $mMain.ShowDialog();

##★起動時の説明-------------------------------------------------------------------
<## [説明]   @BakColor:#E0FFE0   @FntSize:12
〇ﾌｧｲﾙ:[読取窓/保存窓/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/
```


＜コピーリスト２＞[ssPshメモ帳２]カスタマイズ例
◎デバッグモード設定：1行目[@echo off &rem if...] 3行目[pause&exit;]
◎[##★★追加]の行を追加(３行追加)＋その追加機能の説明文を下から３行に記載
```
@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+'##>');"
pause&exit;
##STT:[Ver1.251]●●シンプル[ssPSHメモ帳(ANSI)] 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.251]ssPSHメモ帳 "+$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); $szColorUrl='https://ryupapa008.blogspot.com/p/blog-page_6.html'
##
##★メイン窓の生成　★編集窓の生成  ★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 "[<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 "背景色ｻｲﾄ表示").add_Click({ start $szColorUrl;}); (ssDMnMSet "[---]").add_Click({;}); (ssDMnMSet "[---]").add_Click({;});
 　(ssDMnMSet "Dir/File取得" ).add_Click({ $tBox.SelectedText=((dir -name)-join "`r`n")+"`r`n" }); ##★★追加
(ssDMnMenu "[explorer]").add_Click({ explorer (pwd) }); ##★★追加
##
##★マウス処理：　★右釦メニュの生成/関数登録/メニュ登録  ★ｸﾘｯﾌﾟ処理   ★ダブルクリック  ★ドラッグ＆ドロップ
$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.Copy()});
  (ssRbtMenu "[切り取り]").add_Click({$tBox.Cut()}); (ssRbtMenu "[貼付け]").add_Click({$tBox.Paste()});
$tBox.Add_DoubleClick({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1; $zcc=$tBox.Lines[$ln].trim(); if( $zcc.length -le 2){return; };
  if( $zcc.startsWith("!")-and $zcc.contains("http") ){ $zcc=$zcc.replace("`'",""); Iex("Start `'"+(($zcc.split(";"))[1]).trim()+"`'");return; };
  $zcc=(($zcc-split"##")[0]).trim(); if(Test-Path $zcc -PathType Container){explorer $zcc; return;}; if(Test-Path $zcc){Start -NoN Cmd -Arg "/c `"$zcc`"";};##★★追加
});
$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{ $aa=(ssFileSet $zcc 0); };
});
##★ファイル読取＆表示  ★背景色  ★FNT寸法  ★File保存(bak保存選択)
function ssFileSet($zfl,$zmd){ if(($zfl -ne $null)-and( $zfl.endswith('.txt') -or $zfl.endswith('.ps1')) ){;}else{dbg "No File.txt`n$zfl";return 1; };
  if(Test-Path $zfl){ $global:szFile=$zfl; if($zmd-eq 0){ $zcc=Cat $zfl -Raw;}else{$zcc=Cat $zfl -Encoding UTF8 -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");
};
##★窓表示
$tBox.Text=$fdt.substring( $fdt.indexof("`n<"+"##" )+1); $tBox.SelectionStart=$tBox.Text.length; dbt("[File無し]"); $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       ##バックアップフォルダ
```