2.6.2 GUI窓アプリのPSH登録部をTXTファイルにして[D&Drop][編集]を可能に(基本編)

●GUI窓PSHアプリの登録部をbat部とtxt部に分割

PSH短文コマンドの登録部が[batファイル]であるとダブルクリックでWindowsメモ帳が開かないため何かと不便です。よってPSH短文編集の利便性向上と機能アップを目指し、登録部を[起動/TopPage]ファイル(bat)と、[PSH短文登録]のTXTファイルに分割します。これでPSH短文TXTファイル(txt)もメモ帳が直接利用できます。
<戻る 進む>

●追加機能

  1. TopPage画面に[&FSet& PSH短文TXTファイル]を設定しダブルクリックで画面切替え
  2. explorerから[PSH短文TXTファイル]をドラッグ&ドロップ(D&Drop)で画面切替え
  3. [PSH短文TXTファイル]を編集->マウス[右釦][File保存]で保存
  4. [検索窓][元に戻す]機能の組込み基本編[1.3]
  5. PSHコマンドファイル(XXXXX.ps1)をD&Dropで起動可能


●登録部のbat/txt分割方法

実際のファイル作成は次の手順でコピー&ペースト操作して作成ください。ここでは参考までに基本編[2.6.1]で作成のファイルをコピーし改造方法を記載します。

[改造対応](参考まで)

1) [wndPshListShort001.bat]と[wndPshListShort001.bat]を[dat]フォルダにコピーし各ファイルの[.bat]を[.txt]に変更しダブルクリックして[メモ帳]を起動する。

2) batコマンドの1~3行目を削除して保存しファイル名を以下に変更する。
[wndPshList001.txt] --> [wndPshTxt101.txt]
[wndPshListShort001.txt] --> [wndPshTxtShort101.txt]

3) [wndPshList001.bat]を[wGuiPsh]内にコピー作成しファイル名を以下に変更する。
[wndPshList001 コピー.bat] --> [wndPshCntl101.bat]

4) [wndPshCntl101.bat]を起動し[右釦]-->[編集]で開き以下修正後保存する。
[2行目] .\sys\wndPshPrg001.ps1 --> .\sys\wndPshPrg201.ps1 (001->201)
[5行目以降] [List2.6.1]に従い編集する。

5) [wndPshPrg001.ps1] を[sys]内にコピー作成しファイル名を以下に変更する。
[wndPshPrg001 コピー.ps1] --> [wndPshPrg201.txt]

6) [wndPshPrg201.txt]でメモ帳を開き[List2.6.5]に従い編集し保存し、ファイル名を以下に変更する。
[wndPshPrg201.txt] --> [wndPshPrg201.ps1]

●操作手順

  • [sys]フォルダに、[List2.6.1]で[wndPshPrg201.ps1]を作成
  • [dat]フォルダに、[List2.6.2]で[wndPshTxt001.txt]を作成
  • [dat]フォルダに、[List2.6.3]で[wndPshTxtShort001.txt]を作成
  • [wGuiPsh]フォルダに、[List2.6.4]で[wndPshCntl101.bat]を作成

[wGuiPsh]
 + wndPshCntl101.bat [起動ファイル]
 +[dat]
  + wndPshTxt001.txt [登録ファイル]
  + wndPshTxtShort001.txt
 +[sys]
  + wndPshPrg201.ps1 [PSHプログラム]

●サンプル動作確認のPSHファイル

  パワーシェル(XXXX.ps1)のD&Drop起動確認として添付します。
  [tst_Butn_Mouse01.ps1]...[下図2]参照

●コピペ[List2.6.1]  [wndPshPrg201.ps1]
##Ver1.100 2024/0824 by ryu #####################################
##
##STT:  ★★[Gui窓PSH処理2](PS複数文を実行/File読込/File保存/ドラッグ&ドロップ/検索窓/元に戻す/)

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="[V1.100]"+$fln; }; ##★表示

##★メイン窓/編集窓の生成   ##★窓寸法(WW,HH)  ##★文字種類/寸法  ##★背景色
$mMain =New-Object Form -Pro @{ Size="1080,720"; }; $tBox =New-Object TextBox -Pro @{ Font="BIZ UDゴシック,13"; BackColor="#C0E0C0";
   Dock="Fill"; Multiline=$True; AcceptsReturn=$True; AllowDrop=$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 "[TopPage表示]").add_Click({ ssView( Cat $fln -Raw ); $global:szFile=""; dbt("【TopPage】"); });
  (ssSetRbtMenu "[TopPage編集]").add_Click({ notepad.exe $fln });
  (ssSetRbtMenu "[クリップに取得]").add_Click({ $tBox.Copy()  });
  (ssSetRbtMenu "[クリップを貼付]").add_Click({ $tBox.Paste() });
  (ssSetRbtMenu "[元に戻す]" ).add_Click({ $tBox.Undo(); });
  (ssSetRbtMenu "[File保存]" ).add_Click({ if($szFile -ne ""){ SC $szFile ($tBox.Text); dbt("【保存】$szFile"); }; });
  (ssSetRbtMenu "[検索窓]"   ).add_Click({ $szSchBox1.Text=$szSetChaText; $global:szfindPos=$tBox.SelectionStart; $szSchForm.Show(); });
  $szTool=$MyInvocation.MyCommand.Path; (ssSetRbtMenu "<Psh編集>").add_Click({ notepad.exe $szTool }); 

##★マウス[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); Start -NoN Cmd -Arg "/c $zcc"; return; };
  if( $zcc.startsWith("&") ){ for( $ii=1; $ii -lt 200; $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; }; }; }; ##dbc $zcc;
  if( $zcc.startsWith("&&& ")){ $zcc=$zcc.substring(3); $tBox.SelectionStart+=4; Iex($zcc); return;}; 
  if( $zcc.startsWith("!") -and $zcc.contains("http") ){ $zcc="Start "+($zcc.split(";"))[1]; Iex($zcc); return; }; 
  if( $zcc.startsWith("&FSet&")){ $zcc=$zcc.substring(6).trim(); ssFileSet($zcc); return; }; 
  $zcc=$zcc.replace('"','\"'); if( $zcc.startsWith("& ")  ){ $zcc=$zcc.substring(1); Start powershell -Arg "-noe $zcc"; return; }; 
  if( $zcc.startsWith("&& ") ){ $zcc=$zcc.substring(2); Start -NoN powershell -Arg "$zcc"; return; }; 
}); $fladd=$fln.replace(".bat","_add.ps1"); if( Test-Path $fladd ){ . $fladd; };

##★ドラッグ&ドロップ
$tBox.Add_DragEnter({$_.Effect ="All";});
$tBox.Add_DragDrop({ $zcc=@(([DataObject]$_.Data).GetData("FileDrop")); if(Test-Path $zcc ){;}else{ return; };
    if($zcc.endsWith(".txt") ){ ssFileSet($zcc); }; if($zcc.endsWith(".ps1") ){ Start powershell -Arg "-noe $zcc"; }; });
##★ファイル取得&表示  ##★[File保存]右釦に追加
function dbt($cc){ $mMain.Text="[1.00]"+$cc; };
function ssFileSet($zzFile){ if( (Test-Path $zzFile)-and ($zzFile.endswith('.txt')) ){;}else{ dbg "[ERROR]`n>>> No File.txt`n$zzFile"; return; };
      $global:szFile =$zzFile; $tBox.Text =Cat $szFile -Raw; $tBox.SelectionStart=0; dbt("【読取】$szFile"); };

##★文字検索DLG窓
$szSchFont=New-Object System.Drawing.Font("メイリオ",12); $global:szfindPos=0;
$global:szSchForm=New-Object Form -Pro @{ Text="【検索Box】"; Size="520,108"; MaximizeBox =$False; MinimizeBox=$false; AutoSizeMode="GrowAndShrink"; 
    Topmost=$True; StartPosition="CenterScreen"; }; $szSchForm.Add_Closing({ $_.Cancel =$True; $szSchForm.Visible =$false; });
##★入力BOX   ##★釦0  ##★釦1
$global:szSchBox1=New-Object TextBox -Pro @{ Font=$szSchFont; Location="10,2" ; Size="400,16";}; 
function ssSchBtn($pm0,$pm1,$pm2){ $zob=New-Object Button -Pro @{ Text=$pm0; Location=$pm1; Size=$pm2; Font=$szSchFont; }; return $zob; };
    ( $szSchBtn0 =ssSchBtn "【Top】"  "420,2"   "80,30" ).Add_Click({ $aa=ssSchFind(0)}); 
    ( $szSchBtn1 =ssSchBtn "【検索】" "420,34"  "80,30" ).Add_Click({ $aa=ssSchFind(1)}); 
$szSchForm.Controls.AddRange(@($szSchBox1, $szSchBtn0, $szSchBtn1));
$szSchForm.Add_Click({ $tBox.Focus() });
##★検索go  ##0:Top  ##1:継続
function global:ssSchFind($zcmd){ $zcc=$szSchBox1.Text; $global:szSetChaText=$zcc; if($zcmd -eq 0){ $global:szfindPos=0; };
    $zPos =($tBox.Text).indexof($zcc,$szfindPos); if($zPos -ge 0 ){;}else{ $tBox.Focus(); return 1; };
    $tBox.Select($zPos, $zcc.length); $tBox.ScrollToCaret(); $tBox.Focus(); $global:szfindPos=$zPos+1; };

##★基本窓表示
$fdt=(Cat $fln -Raw); ssView($fdt); $mMain.ShowDialog();

●コピペ[List2.6.2]  [wndPshTxt001.txt]
<##Ver1.05b--[Gui窓PSH処理アプリ]------------------------------------------------
##  [WC]各行をダブルクリック起動(右釦:編集/クリップ処理)

##  [&]①窓有り起動   [&&]②窓無し起動   [&&&]③継続起動(窓無し)   [;]④行連結起動
##  [右釦][TopPage表示]で開始画面表示


&  Dir  C:\              ##★[WC] ①Dir起動

&& mspaint               ##★[WC] ②窓無し:ペイント起動   
&& notepad               ##★[WC]  窓無し:メモ帳起動

&&& mspaint              ##★[WC] ③窓無し:継続起動
&&& dbg "aaaa"           ##★[WC]  dbg関数起動(DLG窓作成)
&&& dbc "cccc"           ##★[WC]  dbc関数起動(DOS窓)


&  for($ii=0; $ii -lt 10; $ii++ ){ $ii; }; ##★[WC] 1行に複数のCMD実行

&  for($ii=0; $ii -lt 10; $ii++ ){  ##★[WC] ④複数行(4)連結しCMD実行
;    $dd = $ii * 2;
;    "Data = $dd  です";
;  }; 

##★③継続起動の例(Step1~4)
&&&  $global:aaa=10;   ##★[WC] Step1:継続:global変数に代入

&&&  dbg $aaa;         ##★[WC] Step2:継続:dbg表示

&&&  $global:aaa=20;   ##★[WC] Step3:継続:代入変更

&&&  dbg $aaa;         ##★[WC] Step4:継続/複数行:dbg表示/dbc表示
;    $aaa=$aaa+15;
;    dbc $aaa; dbg $aaa;


●コピペ[List2.6.3]  [wndPshTxtShort001.txt]
<##Ver1.000--[PSH短文アプリ例処理アプリ]------------------------------------------------
##  [WC]各行をダブルクリック起動(右釦:編集/クリップ処理)

##  [&]①窓有り起動   [&&]②窓無し起動   [&&&]③継続起動(窓無し)   [;]④行連結起動
##  [右釦][TopPage表示]で開始画面表示


##★(1.1)Web表示:よく使うWebカレンダ一覧( [!CMT; url] -> [&& Start url ##CMT] と同じ)
##
![WC]日めくりカレンダ;         "https://www.himekuricalendar.com/"
![WC]今年のりカレンダ;         "https://www.benri.com/calendar/"
![WC]六曜・月齢・旧暦カレンダ; "https://www.ajnet.ne.jp/diary_f/?"
![WC]カレンダ(2050年まで);    "https://www.benri.com/calendar/list.html"
&& Start "https://www.himekuricalendar.com/"  ##★[WC]日めくりカレンダ;


##★(1.2) [郵便番号]入力⇒住所変換(Net利用)
##
&  while($true){ $zNO=Read-Host "[郵便番号(NNNnnnn)]=";   ##★[WC]
;     if( $zNO -eq "" ){ break; };
;     $zres=Invoke-WebRequest "https://api.zipaddress.net/?zipcode=$zNO";
;     $zobj=ConvertFrom-Json $zres.Content; 
;     Write-Host('住所:' + $zobj.data.fullAddress) -ForegroundColor Cyan;
;  };


##★(1.3) 住所から[郵便番号]の検索 (Net利用)
##
&&  Start "https://www.zip-code.jp/adr.php"  ##★[WC]



##★(2.1) 指定フォルダ(zDir)のList表示
##
&  $zDir=$HOME;             ##★[WC] フォルダ指定のこと
;  "[Dir] $zDir"; $zcc=(dir $zDir -name -re); $zcc; 


##★(2.2) 指定フォルダ(zDir)のTree表示
##
&  $zDir=$HOME;             ##★[WC] フォルダ指定のこと
;  "[Dir] $zDir"; $zcc=(tree $zDir /f ); $zcc;


##★(2.3) 指定フォルダ(zDir)の容量をLIST表示[*グラフ付き]
##
&   $zDir=$HOME;            ##★[WC] フォルダ指定のこと
;   "[Dir] $zDir";
;   $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)); }; }; 


##★(3.1) 大きいカレンダ窓の表示
##
&&&  $formMonthCalendar =New-Object Form -Pro @{ Location = "100,50"; Size ="380,500";      ##★[WC]
;        text ="Dlg_DayTimeBox"; StartPosition ="manual"; MaximizeBox =$False; MinimizeBox =$false;
;    }; $formMonthCalendar.Add_Closing({ $_.Cancel =$True; $formMonthCalendar.Visible =$false; });
;    ##
;    $formCalDayTime  =New-Object MonthCalendar -Pro @{ 
;        Location = "5,5"; Size = "350,100"; ##StartPosition = "manual";
;        Font   ="'Meiryo UI', 28"; Visible = $true;  ##$false;
;            ## ForeColor = "192, 0, 192";
;            TrailingForeColor = "192, 192, 0";
;        
;    }; $formMonthCalendar.Controls.Add($formCalDayTime); $formCalDayTime.Show();
;    $formMonthCalendar.Showdialog();


##★(3.2) WakeUP ON LAN(WoL)の送信(6台のPCスリープからWakeUP)
##
&&&  $zPcMac = "                   ##★[WC]
;    94-C6-91-79-EF-F6  ##PC11
;    94-C6-91-79-EF-F7  ##PC12
;    94-C6-91-03-6A-B1  ##PC21
;    94-C6-91-03-6A-B2  ##PC22
;    C8-E2-65-15-C3-C4  ##PC31
;    24-B7-2A-B2-89-AC  ##PC32
;   ";
;   ##
;   $zcc="`n[PC-BIOS Power Management SetUp(WakeUP on LAN)]`n ex) PME:Enb  EPU:Dis`n`n";
;   foreach( $cc0 in $zPcMac.split("`n") ){ $cc0=$cc0.trim(); if($cc0.length -lt 15){ continue; };
;      $cc =(($cc0.split("##"))[0]).trim();
;      $zadr =[byte[]]( $cc-split("[:-]") |%{ [Convert]::ToInt32( $_, 16 ); } );
;      $zcc1 =([byte[]](@(0xff)*6))+$zadr*16; $ztgt =[System.Net.IPAddress]::Broadcast;
;      $zclt =New-Object System.Net.Sockets.UdpClient; $zclt.Connect($ztgt, 2304);
;      $zclt.Send($zcc1, $zcc1.Length) |Out-Null; $zclt.Close();
;      $zcc +="Send magic packet to: $cc0`r`n";
;   }; dbg (">>LAN Power Wake UP<<`n"+$zcc);



##★(3.3) PSH処理の高速化(管理権限で ngen.exeの起動)
##
&&&  $zcc='-noe cd c:\             ##★[WC]
;  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";


●コピペ[List2.6.4]  [wndPshCntl101.bat]
@echo off &if not "%~0"=="%~dp0.\%~nx0" (start /min cmd /c,"%~dp0.\%~nx0" %* &exit) &rem ★DOS窓mini化
powershell -ExecutionPolicy RemoteSigned "$fln=(echo %0); .\sys\wndPshPrg201.ps1 $fln"
exit; pause&exit;


<##Ver1.100--[Gui窓PSH処理アプリ2]------------------------------------------------
##  [WC]各行をダブルクリック起動(右釦:表示/編集/クリップ処理/保存/検索)

##  1) [&]①窓有り起動   [&&]②窓無し起動   [&&&]③継続起動(窓無し)   [;]④行連結起動
##  2) [&FSet&]⑤登録ファイルのGui窓設定(Gui窓で編集->[右釦][File保存])
##  3) explorerからGui窓へD&Drop⑥で、登録ファイル(.txt)の窓設定、PSHファイル(.ps1)の起動可能


##★
&FSet&  dat\wndPshTxt101.txt         ##★[WC] 基本編の登録窓のTXT利用


##★
&FSet&  dat\wndPshTxtShort101.txt    ##★[WC] PSH短文アプリ例9件窓のTXT利用


##★
&  .\dat\tst_Butn_Mouse01.ps1        ##★[WC] パワーシェルファイル(.ps1)の起動(釦/マウス利用DBG)ま[コピペList2.6.5]  [tst_Butn_Mouse01.ps1]
##
##●●釦設置とマウスの利用例  by ryu
##
using namespace System.Windows.Forms; Add-Type -AssemblyName System.Windows.Forms,System.Drawing;##★GUI
function dbg($zcc){[MessageBox]::Show($zcc)};  function dbc($zcc){Write-Host $zcc;}; ##★DBG表示

##●基本窓  ##●釦設定
$form =New-Object Form -Pro @{ Size="320,400"; Text="釦設置と釦押下"; };
function ssButnSet( $zloc, $zsize, $zcha){ $zww=New-Object Button -Pro @{ Location=$zloc; Size=$zsize;  Text=$zcha; };
    $form.Controls.Add($zww); return $zww; };
##
(ssButnSet  "10,5"  "80,25" "テスト11" ).add_Click({ dbc "BUTN11" });
(ssButnSet "110,5"  "80,25" "テスト12" ).add_Click({ dbc "BUTN12" });
(ssButnSet "210,5"  "80,25" "テスト13" ).add_Click({ dbc "BUTN13" });

(ssButnSet  "10,35" "80,25" "テスト21" ).add_Click({ dbc "BUTN21" });
(ssButnSet "110,35" "80,25" "テスト22" ).add_Click({ dbc "BUTN22" });
(ssButnSet "210,35" "80,25" "テスト23" ).add_Click({ dbc "BUTN23" });

##●マウス動作検知
$form.Add_MouseWheel({ dbc("Wheel "+$_.Delta); });
$form.Add_MouseClick({ dbc("Click "+$_.Button) });
$form.Add_MouseDoubleClick({ dbc "WClick" });

## $form.Add_MouseDown({ dbc "Down " });
## $form.Add_MouseUp({   dbc "Uppp " });
## $form.Add_MouseMove({ $zXX=[Cursor]::Position.X; $zYY=[Cursor]::Position.Y; dbc "Move($zXX,$zYY)" });

$form.ShowDialog();

[図1]  [wndPshCntl101.bat]のダブルクリック画面


[図2] [tst_Butn_Mouse01.ps1]のD&Drop起動画面


更新状況

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

ブログ検索

QooQ