●PSHメモ帳の簡単カスタマイズ機能addを使う
◎今回は機能追加ファイル(add)を使って実践編に向けた環境構築を行います。PSH利用の課題として「起動時の高速化」「Windowsメモ帳ファイルのANSI変換」があります。この対応をメニュ[ツール1]に組込みます。合わせてマクロ機能、窓処理追加のカスタマイズ例を記載します。なお実践編に向けてフォルダ/ファイル構成が変更になります。
<戻る 進む>
★お手数ですが Microsoft bingサイトから「コピペ gui」で検索頂き閲覧頂くと幸いします。原因不明ですが約1ヶ月でgoogle審査15頁登録済みから全頁「インデクス未登録」となりたいへん困っています。原因解決するまでよろしくお願いいたします。
●フォルダ/ファイル構成の変更
◎実践編はPSHアプリが増えるのでフォルダとファイルを次のように構築ください。
- [sys]と[sysBak]フォルダを[wGuiPsh2]内に新規作成する
- [wndPshPrg201.ps1]を[sys]フォルダにコピーする
- Windowsメモ帳を使って下記コピペ[List4.1.1]で新たに[wndPshPrg201_add.ps1]を作成し[sys]フォルダへ移動する(★注.保存時ANSI設定のこと)
◎フォルダ構成(現存ファイルは省略)
[wGuiPsh2]
◎PSHメモ帳のsys利用設定
◎動作確認後wndPshPrg221.ps1
&KKK コピペ gui ##コメント可
&KEI _【来週塾でいるおかね】 ##★[WC]計算
&KEY ##★[WC]キー出力(@Stopを利用)
●コピーリスト
◎[List4.1.1] -> [sys\wndPshPrg201_add.ps1]
[修正1205] マクロ関数内 ssWClkUsrCmd($ln,$zcc){;}; ->(ssWClkUsrCmd $ln $zcc);##▲
[wGuiPsh2]
+dat [テキストファイル用]
+grf [グラフファイル用]
+sysBak [旧バージョン用フォルダ]
+sys [PSHアプリ用フォルダ]
|(wndPshPrg201.ps1,wndPshPrg201_add.ps1)
◎PSHメモ帳のsys利用設定
- PSHメモ帳[wPshMemo301.bat]を起動し[ファイル]->[TopPage編集]押下し2行目を修正し保存する(\sysを追加)
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); .\wndPshPrg201.ps1 $fln"
↓↓↓
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); .\sys\wndPshPrg201.ps1 $fln"
◎動作確認後
必要により[wPshMemo201.bat]も同上編集を行ったあと次の起動画面の動作確認後、[wGuiPsh2]直下の次の旧PSHファイルを[sysBak]へ移行します。
wndPshPrg221.ps1
wndPshPrg221_add.ps1
wndPshPrg221_usr.ps1
wndPshPrg201.ps1
wndPshPrg201_add.ps1
●起動画面のメニュー表示
上記対応後、PSHメモ帳を終了し再起動します。下図は[ツール1]釦、[現在フォルダ表示]釦の押下画面です。
![]() |
PSHメモ帳の機能追加パワーアップ画面 |
◎[フォルダ]釦への追加
- [現在フォルダ]表示★上記[Dir画面]
- [デスクトップDir]表示★上記[Dir画面]
- [ダウンロードDir]表示
- [BakUPフォルダ]表示
- [Windows設定]表示
- [アプリ一覧Dir]表示
- [ゴミ箱]Dir表示
- [現在フォルダ]表示★上記[Dir画面]
- [現在フォルダ]再帰表示★上記[Dir画面]
- [大きいカレンダ]
- [PSH高速化(ngen)]
- [UTF8->ANSI変換]
- [アプリ変数表示]
- [画面クリア]
- [HTML特殊文字変換]
●機能追加の説明
◎[PSH高速化(ngen)]
Microsoftのngen.exeを組込んだPSH短文を管理者権限で起動します。最初は結構時間がかかりますが2度目からは早く終了します。なおWindowsバージョンアップ時には毎回起動します(私は3週間周期で実施)。
◎[UTF8->ANSI変換]
windowsメモ帳のデフォルトはUTF8コード設定のためテキストファイルをドラッグ&ドロップすると「文字化け」した画面になります。そのときこの釦を利用します。なおこの処理は「確認小窓」画面で[Y]押下後、[File保存]->[Y][N]で指定ファイルが変換上書きされます。
![]() |
UTF8ファイルの文字化け状態 |
↓↓
![]() |
ANSI変換後の画面 |
◎DIR表示窓処理
起動画面の[Dir画面]で指定フォルダの内容をMsgBoxに表示します。行をダブルクリックでwindows指定処理などが実行されます。結構ノウハウのいるプログラムですのでカスタマイズ利用するとき参考にしてください。ここで追加したのはフォルダ管理する場合、フォルダやファイル名をマウスコピー利用するためです。
◎その他の釦追加
- [アプリ変数表示]..カスタマイズDBGするとき利用します。
- [画面クリア]..コピペでの新ファイル作成利用や次の[HTML変換]で利用します。
- [HTML特殊文字変換]..Web表示への記載用に特殊文字[<][>][']["]を変換しMsgBoxに出力します。
◎[&XXX]マクロ機能追加(ダブルクリック動作)
- [&KKK ]行開始の検索文言指定でmsn検索を起動しWeb表示します。なお[##]右側にコメント記載可能です。
&KKK コピペ gui ##コメント可
&KKK gui QR マネージャ ##コメント可
- [&KEI ]行で応用編[3.1]の計算関数と同じ処理をします([ssKeisan]['][;]が不要です)
&KEI _【来週塾でいるおかね】 ##★[WC]計算
_ 名 称 _ 単価 * 個数
1.ノート _ 120 * 3 =
2.えんぴつ_ 80 * 5 =
3.消しゴム_ 20 * 2 =
- [&KEY ]行で応用編[3.2]のキー操作関数と同じ処理をします([ssKeyAuto]['][;]が不要)
&KEY ##★[WC]キー出力(@Stopを利用)
{D}Dt1.ABCDEFGHIJKLMN
@Stop
{D}Dt2.abcdefghijklmn
@Stop
{D}Dt3.あいうえおかきく
@Stop
{D}Dt4.今日は晴天なり
◎[List4.1.1] -> [sys\wndPshPrg201_add.ps1]
[修正1205] マクロ関数内 ssWClkUsrCmd($ln,$zcc){;}; ->(ssWClkUsrCmd $ln $zcc);##▲
##V1.312 2024/1205 by ryu
##●●[PSHメモ帳]拡張機能ファイル(応用編[41])
##LOG:
##
##★[ファイル]釦メニューに追加
$global:szMnBas=$szMenu1;
(ssDMnMSet "[<Add編集>]" ).add_Click({ & $szEditor $fladd });
$aa=(ssDMnMSet "----");
(ssDMnMSet "再起動" ).Add_Click({ Restart-Computer -Force });
(ssDMnMSet "電源OFF" ).Add_Click({ Stop-Computer -Force });
(ssDMnMSet "スリープ" ).Add_Click({ [Application]::SetSuspendState(0, $false, $false) });
##★[フォルダ]釦メニューに追加
$global:szMnBas=$szMenu8; $aa=(ssDMnMSet "----" );
(ssDMnMSet "[現在フォルダ表示]").add_Click({ ssViewDir });
$global:szMnBas=$szMnBas2;(ssDMnMSet "[explorerで]").add_Click({ explorer (pwd) }); $global:szMnBas=$szMenu8;
(ssDMnMSet "[デスクトップDir]").add_Click({ ssViewDir 0 $home\Desktop });
$global:szMnBas=$szMnBas2;(ssDMnMSet "[explorerで]").add_Click({ explorer $home\Desktop }); $global:szMnBas=$szMenu8;
(ssDMnMSet "[ダウンロードDir]").add_Click({ explorer $home\Downloads });
(ssDMnMSet "[BakUPフォルダ]" ).add_Click({ $zcc=(pwd); explorer "$zcc\bak" });
(ssDMnMSet "[Windows設定]").add_Click({ explorer ms-settings: });
(ssDMnMSet "[アプリ一覧Dir]").add_Click({ explorer shell:AppsFolder });
(ssDMnMSet "[ゴミ箱]" ).add_Click({ explorer shell:RecycleBinFolder });
##★[編集]釦メニューに追加
$global:szMnBas=$szMenu4;
(ssDMnMSet "Top移動[TagRet]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret() });
(ssDMnMSet "Bottom移動").add_Click({ $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret() });
(ssDMnMSet "右端折返し切替").add_Click({ if( $tBox.WordWrap ){$tBox.WordWrap=$false;}else{$tBox.WordWrap=$true;}; });
$aa=(ssDMnMSet "----");
(ssDMnMSet "TList[##★]取得").add_Click({ ssTagListGet "720,600" });
(ssDMnMSet "TList[]前後表示").add_Click({ $fmTgBox.TopMost=$false });
##if($fmTgBox.TopMost -eq $True){ $fmTgBox.TopMost -eq $false }else{ $fmTgBox.TopMost -eq $True };});
##★新規登録[Menu9]
$global:szMenu9=(ssDMnMenu "ツール1" );
(ssDMnMSet "[現在フォルダ表示]").add_Click({ ssViewDir });
(ssDMnMSet "[現在フォルダ再帰表示]").add_Click({ ssViewDir 1 });
(ssDMnMSet "[Dir容量表示]" ).add_Click({ $zcc0=ssDirVol(1); (ssPshAct 0 $zcc0); });## [0][&]行処理
(ssDMnMSet "[DirのTree表示]").add_Click({ $zcc0=ssDirVol(0); (ssPshAct 0 $zcc0); });## [0][&]行処理
$aa=(ssDMnMSet "----");
(ssDMnMSet "[大きいカレンダ]").add_Click({ ssBigCalen });
(ssDMnMSet "[PSH高速化(ngen)]").add_Click({ ssNgen });
(ssDMnMSet "[UTF8->ANSI変換]" ).add_Click({ ssToolAct !ANSI });
$aa=(ssDMnMSet "----");
(ssDMnMSet "[アプリ変数表示]").add_Click({ ssToolAct !AplD });
(ssDMnMSet "[画面クリア]" ).add_Click({ ssToolAct !DClr });
(ssDMnMSet "[HTML特殊文字変換]").add_Click({ ssToolAct !HtmC });
##★新規登録[Menu10]
$global:szMenu10=(ssDMnMenu "ツール2" );
(ssDMnMSet "[電卓]").add_Click({ calc.exe });
(ssDMnMSet "[画面コピー]").add_Click({ SnippingTool.exe });
$aa=(ssDMnMSet "[----]");
(ssDMnMSet "[Win設定]" ).add_Click({ start ms-settings: });
(ssDMnMSet "[コントロールパネル]").add_Click({ control.exe });
$aa=(ssDMnMSet "[----]");
(ssDMnMSet "[PSH窓]").add_Click({ Start powershell });
(ssDMnMSet "[PSH管理者]").add_Click({ Start -Verb runas powershell });
##★新規登録[Menu11]
$global:szMenu11=(ssDMnMenu "ツール3" );
(ssDMnMSet "[----]").add_Click({;});
##★新規登録[Menu12]
$global:szMenu12=(ssDMnMenu "Help" );
(ssDMnMSet "[背景色サイト]" ).add_Click({ start "https://ryupapa008.blogspot.com/p/blog-page_6.html" });
(ssDMnMSet "[HELP操作説明]" ).add_Click({ ssHelpView 0 0 });
(ssDMnMSet "[日めくりカレンダ]").add_Click({ start "https://www.himekuricalendar.com/" });
$aa=(ssDMnMSet "[----]");
(ssDMnMSet "[Web:Psh入門]").add_Click({ start "https://step-learn.com/article/powershell/index.html" });
(ssDMnMSet "[Web:PSHサイト]").add_Click({ start "https://forsenergy.com/ja-jp/windowspowershellhelp/html/7908faf0-0e08-443d-8060-aac911e5a7e0.htm" });
(ssDMnMSet "[Psh短縮Cmd]").add_Click({ start "https://mseeeen.msen.jp/research-powershell-command-alias" });
$aa=(ssDMnMSet "[----]");
(ssDMnMSet "[<Help編集>]" ).add_Click({ if( Test-Path $szHelpDoc ){ $zcc=$szHelpDoc }else{ $zcc=$fladd }; & $szEditor $zcc });
##★マウス右釦メニュに追加
(ssRbtMenu "[検索窓]").add_Click({ssSchBoxSet $tBox});
(ssRbtMenu "クリップ1行取得").add_Click({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1;
$zcc=($tBox.Lines[$ln]).trim(); Set-Clipboard $zcc; });
##★機能追加2(ユーザ予備)
function global:ssWClkUsrCmd($ln,$zcc){;};
$global:fladd2=$szTool.replace(".ps1","_usr.ps1"); if( Test-Path $fladd2 ){ . $fladd2; };
##★[&CCCC][WC]起動処理の追加(マクロ登録)
##
function global:ssWClkCmd($ln,$zcc){
##★Web検索
if( $zcc.startsWith("&KKK ") ){ $zcc="https://www.bing.com/search?q="+($zcc.substring(5)).trim(); Iex("Start `'$zcc`'"); return; }
##★キー入力 ★計算
if( $zcc.startsWith("&KEY ") -or $zcc.startsWith("&KEI ") ){ $zcc0=$zcc.substring(5).trim();
for( $ii=1; $ii -lt 300; $ii++ ){ $cc=$tBox.Lines[$ln+$ii]; if(($cc -eq $null)-or($cc.length -le 2 )){break;};
if($cc.startsWith("#")){continue;}; $zcc0+="`n"+($cc.trim()) }; ## dbg $zcc0
if( $zcc.startsWith("&KEI") ){ (ssKeisan $zcc0 ) ; return;};
if( $zcc.startsWith("&KEY") ){ (ssKeyAuto $zcc0 ) ; return;};
}
(ssWClkUsrCmd $ln $zcc); ##▲
##dbg $zcc;
};
##★Dir容量表示【ssDir zcmd】[0]Tree表示//[1]Dir容量表示)
##
function global:ssDirVol($zcmd){ $zcc0= '$zDir=Read-Host "[DIR名]= "; if($zDir -eq "" ){ $zDir=(pwd); }; echo "[Dir] $zDir" ;'
if($zcmd -eq 0){ $zcc0+='tree $zDir /f ;'; return $zcc0; }; ##★Tree
$zcc0+='$zlist =dir $zDir -Directory |%{ [PsCustomObject]@{ "Name"=$_.Name; "Size"=(dir $_.FullName -File -Recurse |measure -Sum -Property Length).Sum }; };
$zmes =$zlist |measure -Max -Min -Property Size; $zlist |%{ [PSCustomObject]@{ "Name"=$_.Name; "Size"=( ([int]$_.Size).ToString("#,#") ).PadLeft(16);
"Graph"=("*" * [int]($_.Size/($zmes.Maximum)*10)); }; };';
return $zcc0;
};
##★[31]式表計算の処理【 ssKeisan zpam 】
##
function global:ssKeisan($zcmd ){ $zcmd=$zcmd; $dd0=$zcmd; $zcc0="`r`n"; $ss=0;
foreach($cc in ($dd0-replace("[=]","")).split(";`n") ){ ##★式分割
if($cc.startsWith("_") ){ $zcc0+="$cc`r`n"; continue;}; ##★!コメント行
$zcc0+=" "; if($cc.Contains("_") ){ $cc2=$cc.split("_"); $zcc0+=$cc2[0]+"_"; $cc=$cc2[1]; };
if($cc.length -ge 3 ){ $dd=Iex($cc); $ss+=$dd; $zcc0+="$cc = $dd`r`n"; }else{ $zcc0+="$cc`r`n";};
}; $zcc0+="合計= $ss"; (MsgBox $zcc0);
};
##★[32]キー操作自動化の処理【ssKeyAuto zpam】
##
function global:ssKeyAuto($zcc0){
if((ssMsgYesNo "注" "[英]入力モードを確認し`nキー入力BOXをクリアし、[Y]釦押下し`n素早く入力BOXをクリック")-ne "Yes" ){ return;};
Start-Sleep -m 2500; $zcc0=$zcc0.replace("{T}","{TAB}").replace("{D}","{DELETE}").replace("{E}","{ENTER}");
foreach( $cc in $zcc0.split(";`n") ){ if($cc.length -lt 3){ continue; }; $zcc=$cc.trim();
if( $zcc.startsWith("@Wait") ){ $zdd=[int]($zcc.substring(6)); dbc("[Wait(s)] $zdd"); Start-Sleep -m ($zdd*1000); continue; };
if( $zcc.startsWith("@Stop") ){ $zcc1="送信継続は[Y]押下し素早く入力BOXをクリック`n停止は[N]をクリック";
if( (ssMsgYesNo "停止中" $zcc1)-ne "Yes" ){ return;}; Start-Sleep -m (2*1000); continue; };
[SendKeys]::SendWait("$zcc");
};
};
##★[33][34][35]googleグラフの処理 【ssGraf zType zOption zData zColum zPrg zBody】
##
function global:ssGraf($zType,$zOption,$zData,$zColum,$zAddProg,$zAddBody){ $szfile="$home\Desktop\gChart01.html";
$zcc0='<html><head><script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript"> google.charts.load("current", {packages:["@@Package"]});
google.charts.setOnLoadCallback(drawChart); var chart; var options; var data;
function drawChart(){ chart = new google.visualization.'+$zType+'(document.getElementById("chart_values"));
options='+$zOption+'; ';
if( $zData.startsWith("[") ){ $zcc0+='data =new google.visualization.DataView(
google.visualization.arrayToDataTable( '+$zData+' ) );' }
else{ $zcc0+='data =new google.visualization.DataTable(); '+$zData+'; ' };
$zcc0+=$zColum+';chart.draw(data, options); };'
$zcc0+=$zAddProg+';</script></head><body><div id="chart_values" ></div>'+$zAddBody+'</body></html>' ; $zcc1='corechart';
foreach($cc in 'AnnotationChart','TreeMap','Timeline','Table','VegaChart','GeoChart','Gauge','Sankey','Calendar','WordTree','TreeMap'){
if($cc -eq $zType){ $zcc1=$cc; break; }; }; $zcc0=$zcc0.replace('@@Package',$zcc1);
SC $szfile $zcc0; & $szfile; ##★Web.html起動
};
##★[36]株表示の処理 【 ssKaView zKind zKabNo zUrl】
##
function global:ssKabView($zzcmd,$zzcc,$zzurl){
if($zzurl.length -gt 10){ $zUrl =$zzurl; if( $zzcmd -eq "!KabMany"){ Start ($zzurl.replace("@@@@",$zzcc )); return;}; }
else{
switch($zzcmd){
!KdoraCha{ Start ("https://www.kabudragon.com/s?t="+$zzcc ); return; }
!YahooNow{ Start ("https://finance.yahoo.co.jp/search/?query=$zzcc" ); return; }
!YahooCha{ $zUrl="https://finance.yahoo.co.jp/quote/@@@@.T/chart?";
$zUrl+="styl=lne&frm=mntly&scl=stndrd&trm=1w&evnts=&ovrIndctr=sma%2Cmma%2Clma&addIndctr=slwStchstc"; break; }
!KtanCha { $zUrl="https://s.kabutan.jp/stocks/@@@@/"; break; }
};
};
foreach( $cc in $zzcc.split("+") ){ if( $cc.length -ge 4 ){ Start ($zUrl.replace("@@@@",$cc)); Sleep -m 1000; }; };
};
##★[36]【STag [文字] pm】移動 ## [WebTable] 移行で検索、、、
##
$global:szsTagIndx="[WebTable]"; ##★sTagの検索開始文字[WebTable]
function global:sTag($zcc,$zpm){ $szSchBox1.Text=($zcc.split(" "))[0]; $global:szfindPos=($tBox.Text).indexof($szsTagIndx);
if( $zpm -eq 0){ $tBox.WordWrap=$false }; $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret(); ssSchFind(1); };
##if( $szMenu13 -eq $null ){ ($global:szMenu13=ssDMnMenu "[TagRet]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret(); });
##★[37][右釦]へQR処理組込み(szQRSaveMode=1で[QRcd]へQRcode保存)
$global:szCMn10=ssRbtMenu "[!name;QRcode]生成"; $global:szQrDir="QRcd";##開始時QRDir
$szCMn10.add_Click({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1;
$zcm=($tBox.Lines[$ln].replace("`'","")).split(";"); $zFl=$zcm[0].trim(); $zQR=$zcm[1].trim();
if( $zFl.startsWith("!") -and ($zQR.length -ge 5) ){;}else{return;};
if( $szQRSaveMode -eq 1 ){ $zFl="$szQrDir\$zFl.png";}else{ $zFl="$home\Desktop\QRcode.png";};
MsgBox "$zFl`n$zQR"; New-QRCodeText -Text $zQR -Width 10 -Show -Out $zFl;
});
##★[38]TagListBoxから[WC]で移動 [##★[XXX]]の行へ移動
$global:szTagListCha="##★"; ##★TagList作成文字
function global:ssTagListGet($zpam1){ $zDat=($tBox.Text).replace("`r",""); $zcc0="";
foreach($cc in $zDat.split("`n") ){ if( $cc.startsWith($szTagListCha) ){;}else{ continue;}; $zcc0+=$cc+"`n"; };
$ww=$zpam1; $global:fmTgBox=New-Object Form -Pro @{ Size=$ww; Text="【移動Tag-List】" ; TopMost=$True; };
$global:tgBox=New-Object TextBox -Pro @{ Font="$szFont,14"; Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical;};
$fmTgBox.Controls.Add($tgBox); $tgBox.Text=($zcc0.replace("`n","`r`n")); $tgBox.SelectionStart=0; $fmTgBox.Show(); $tgBox.WordWrap=$false;
##★[WC]処理
$tgBox.Add_DoubleClick({ $ln=((($tgBox.Text).substring(0,$tgBox.SelectionStart)).split("`n")).count-1; $zcc=($tgBox.Lines[$ln]).trim();
if($zcc.length -le 2){return; }; $szSchBox1.Text=$zcc; $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret(); ssSchFind(0);##★PSH窓TXT
});
$tgBox.ContextMenuStrip =$global:conMenu =New-object ContextMenuStrip -Pro @{ Font="BIZ UDゴシック,12"; };
(ssRbtMenu "[検索窓]" ).add_Click({ ssSchBoxSet $tgBox }); (ssRbtMenu "[コピー]").add_Click({ $tgBox.Copy() });
(ssRbtMenu "[Top移動]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret() });
};
##★[41]PSH起動の高速化
##
function ssNgen(){ $zcc='-noe cd c:\
Set-Alias ngen @(dir (join-path ${env:\windir} \"Microsoft.NET\Framework\") ngen.exe -recurse |sort -descending lastwritetime)[0].fullName
Set-Alias ngen64 @(dir (join-path ${env:\windir} \"Microsoft.NET\Framework64\") ngen.exe -recurse |sort -descending lastwritetime)[0].fullName
[appdomain]::currentdomain.getassemblies() | %{ if($_.location -match $(\"\\assembly\\GAC_64\") ){
ngen64 install $_.location }else{ ngen install $_.location }; } ';
Start -Verb runas -FilePath powershell.exe -Arg "$zcc";
};
##★[41]フォルダ表示(cmd=0:現在DIR 1:再帰表示)
##
function ssViewDir($zcmd, $zdir){ if($zdir-eq $null){ $zdir=(pwd);}; $zcc="[ダブルクリック起動]`n"; $global:szViDir=$zdir;
if($zcmd -eq 1 ){ $zcc +="[$zdir]`n___[Dir/File]_________________________________________`t#__`n";
dir $zdir -name -rec |%{ $nn=[System.Text.Encoding]::GetEncoding("shift_jis").GetByteCount($_);
if( $nn -gt 52 ){ $nn=2; }else{ $nn=52-$nn; }; $zcc+=$_ + (" "*$nn)+"`t## `n" ; };
}else{ $zcc +="[$zdir]`n___[Dir/File]________________________________`t#__[Date/Time]________[Size](D=1)`n";
dir $zdir|%{ $nn=[System.Text.Encoding]::GetEncoding("shift_jis").GetByteCount($_.Name);
if( $nn -gt 46 ){ $nn=2; }else{ $nn=46-$nn; }; $zcc+=($_.Name + (" "*$nn)) ;
$zcc+="`t## "+($_.LastWriteTime)+(([int]$_.Length).ToString("#,#")).PadLeft(10)+"`n"; };
}; MsgBox $zcc "960,720" ("["+(pwd)+"]"); $mBox.AcceptsTab=$true; $mBox.WordWrap=$false; $mBox.BackColor="#EAF4FE";
$mBox.Add_DoubleClick({ $ln=((($mBox.Text).substring(0,$mBox.SelectionStart)).split("`n")).count-1;
$zcc=(($mBox.Lines[$ln]-split"##")[0]).trim(); if($zcc.length -le 2){return; }; $zcc="$szViDir\$zcc";
if( Test-Path $zcc -PathType Container ){ explorer $zcc; return; };
if( Test-Path $zcc ){ if($zcc.endswith('.rtf') ){ ssRtfMemo $zcc }else{ Start -NoN Cmd -Arg "/c `"$zcc`""; }; };
});
};
##★[41]大きいカレンダ(カスタマイズ)
##
function ssBigCalen(){ $fmCal=New-Object Form -Pro @{ Location="100,50"; Size="380,500"; };
$zMonCal=New-Object MonthCalendar -Pro @{ Font="'Meiryo UI',28"; TrailingForeColor="192,192,0"; };
$fmCal.Controls.Add($zMonCal); $fmCal.Showdialog();
};
##★[41]ツール処理(カスタマイズ)
##
function ssToolAct($zcmd,$zpam){ switch($zcmd){
##★アプリ変数表示
!AplD{ $zcc=(pwd);
MsgBox "[編集] $szFile`n[戻り] $szFlBak1`n[Dir] $zcc`n[editor] $szEditor`n[apl] $szTool`n[add] $fladd2`n[TopPage] $fln" ;
return;}
##★画面クリア
!DClr{ if((ssMsgYesNo "【画面クリア(Y/N)】" "ファイル設定と画面クリアしてOKですか?")-ne "Yes" ){ return; };
$tBox.Text=""; if($szFile-ne ""){$global:szFlBk1=$szFile; }; $global:szFile=""; dbt("■File無し");
return;}
##★UTF8->ANSI変換
!ANSI{ if( ($szFile -ne "")-and (Test-Path $szFile) ){;}else{ return; }; $tBox.Text=Cat $szFile -Raw -Encoding UTF8; $tBox.SelectionStart=0;
if( (ssMsgYesNo "注:UTF8->ANSI変換OKですか?(Y/N)" "[File保存]押下で`n上書処理(Y/N/キャンセル)します`n`n$szFile" )-eq "Yes" ){ return; };
$tBox.Text=Cat $szFile -Raw; $tBox.SelectionStart=0;
return;}
##★HTML特殊文字変換(変換文字:&,<,>,",') MSGBOXに出力
!HtmC{ $zcm=@("&","&", "<","<", ">",">", "`'","'", "`"",""", "`r","");
$zcc=$tBox.Text; for( $ii=0; $ii -lt $zcm.length; $ii+=2){ $zcc=$zcc.replace($zcm[$ii],$zcm[$ii+1]); };
MsgBox $zcc "1180,720";
return;}
};};
##★[38]Help処理
$szHelpDoc="$szToolDir\wPshHelpDoc101.txt";
function ssHelpView($zcmd,$zpam){
if( Test-Path $szHelpDoc ){ $zcc=(Cat $szHelpDoc -Raw); }else{ $zcc=(Cat $fladd -Raw); $zcc=$zcc.substring($zcc.indexof("<##★"+"[HELP]")+1); };
$zcc=$zcc.replace("`r",""); MsgBox $zcc "1140,780"; if($mBox -eq $null){ return; }; $mBox.BackColor="#FFF7EE";
$mBox.Add_DoubleClick({ $ln=((($mBox.Text).substring(0,$mBox.SelectionStart)).split("`n")).count-1; $zcc=($mBox.Lines[$ln]).trim(); ##dbc $zcc;
if( $zcc.startsWith("!") -and $zcc.contains("http") ){ Iex("Start `'"+(($zcc.split(";"))[1]).trim()+"`'"); return; };
});
};
<##★[HELP]画面 ####################################################
!【サイトマップ】; https://ryupapa008.blogspot.com/p/blog-page_14.html
!【操作説明】; https://ryupapa008.blogspot.com/2024/09/psh.html
----
(1.1) ファイル1行目: [#! @BakColor:#F0E0C0 @FntSize:14 @WndSize:1080,740]で指定する。
! 背景色は[@BakColor:#F0E0C0]で指定。色値サイト; https://ryupapa008.blogspot.com/p/blog-page_6.html
文字寸法は[@FntSize:14]で指定。画面寸法(幅,高さ)は[@WndSize:1080,740]で指定。
----
(2.1) [&]行:PSH起動。 [&&]行:窓無し起動。
[&&&]行:継続起動。アプリの内部関数(dbg/dbc/MsgBox)等を利用可能。
[;]行:行連結。[&]行の次の[;]行を連結し[&][&&][&&&]行の対応処理を実行。
(2.2) [>]行:DOS-CMD起動。 [>>]行:窓無し起動。
[> cd Dir名]行で指定フォルダへ移動。 4)[TopPage]表示で元のフォルダへ戻る。
(2.3) [&FSet& File名]行:ファイル名(txt/rtf)を設定し、新規/編集/保存する。
注.[TopPage]は[ファイル]->[TopPage]反映/編集で処理する。
(2.4) [&FSet& Dir名]行: フォルダ管理処理として次の処理をする。
フォルダ内に[!readMe.txt]を仮作成し、そのフォルダへ移動する([File保存]押下で保存)。
[右釦]>[ツール]>[Dir/File取得]でフォルダ/ファイル名を取得し、[##]コメント記載で管理する。
[フォルダ/ファイル名]行をダブルクリックでそのファイルを起動する。
(2.5) [!コメント; Http:xxxxxxxxxxxx]行で指定Webサイトを表示する。
(2.6) ファイル(txt)を窓に[D&Drop]で、表示/編集/保存する。
PSHファイル(ps1)を窓に[D&Drop]で、PSHファイルを起動する。
フォルダ(Dir)を窓に[D&Drop]で、(2.4)項の処理をする。
(2.7) [File]のサブメニュで次の編集をする。
1)[TopPage]反映/編集、2)[Psh編集]:PSHメモ帳、3)[Add編集]:追加機能
##★次のPSH処理は_add.ps1(V1.20)に組込まれます。
!3.1_計算表示マネージャ_____[31]参照;https://ryupapa008.blogspot.com/2024/09/psh_8.html
&&& ssKeisan '文字列' ##★[WC]
!3.2_自動キー入力マネージャ_[32]参照;https://ryupapa008.blogspot.com/2024/09/pshpsw.html
&&& ssKeyAuto '文字列' ##★[WC]
!3.3_PSW管理マネージャ___[32]参照;https://ryupapa008.blogspot.com/2024/09/pshpsw.html
&&& ssKeyAuto '文字列' ##★[WC]
!3.4_googleグラフマネージャ_[33]参照;https://ryupapa008.blogspot.com/2024/09/google.html
&&& ssGraf $zType $zOption $zData ##★[WC]
!3.5_WEB表示マネージャ___[36]参照;https://ryupapa008.blogspot.com/2024/09/pshwebpsh.html
&&& sTag [文字] (pam) ##★[WC]pam=0:表示モード指定後、sTag 移動
&&& $tBox.WordWrap=$true; ##★[WC]登録モード
&&& $tBox.WordWrap=$false; ##★[WC]表示モード
!3.6_QR生成マネージャ_____[37]参照;https://ryupapa008.blogspot.com/2024/09/qrpshweb.html
[対象行クリック]->[編集]->[!name;QRcode]生成 ##★QR生成方法
&&& $global:szQRSaveMode=0; ##★[WC]DiskTopに保存
&&& $global:szQRSaveMode=1; explorer $szQrDir; ##★[WC] QRDirに保存->開く
!3.7_テキストマネージャ______[38]参照;https://ryupapa008.blogspot.com/2024/09/qrpshweb.html
&&& ssTagListGet "720,600"; ##★[WC]タグリスト取得
&&& $fmTgBox.TopMost=$false; ##★[WC]List[]前後表示
##>