パワーシェル基本原理を使うシンプルなssPSHメモ帳パワーアップ版(2.5基本編)

●シンプルでスマートな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]など動作可能です)。
★注意:ssPSHメモ帳の動作確認は十分対応していますが、問題が発生した場合、自己責任での対応でお願い致します。

●パワーアップ版の作成と起動画面

◎Windowsメモ帳を使って添付リスト[List2.5.1]をコピペ操作でテキストファイルに張付け、保存ファイル名を[ssPshMemoPup.bat]と入力してANSIコード設定で保存します。
そしてそのファイルをダブルクリックで次の画面が表示されます。★[ANSI]コード設定を確認ください。

[List2.5.1] --> [ssPshMemoPup.bat]

ssPSHパワーアップ版の起動画面(操作説明)
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短文コマンドファイル

  • ◎機能追加[add]への対応..[起動ファイル名_add.ps1]のPSHファイルを起動ファイルと同じフォルダに設置するとPSH機能追加できます。[ssPshMemoPup.bat]では[ssPshMemoPup_add.ps1]となります。これによりPSH短文関数やPSHマクロなどの登録が可能です。
  • ◎rtfメモ帳への対応..起動ファイルのあるフォルダ内の[sys]フォルダに[wPshRtfMemo501.ps1]を登録するとrtfメモ帳が利用可能です。

●メニューの機能説明

◎[ファイル]
  • 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メモ帳への対応

更新状況

新記事登録でgoogle検索不可の状態です。原因不明の全ページgoogleインデックス未登録の状態です。昨年11月から記事が書けずに非常に困っています。 MSNサイトから[コピペgui]で検索利用ください。最新の[コピペ一覧]ページを追加しました。

ブログ検索

QooQ