日本語文字列を使用すると動作がおかしくなります。 文字数とバイト数の区別があいまいなため、日本語を使用した文字分だけ スクリプトの最後が削られていきます。
この問題を回避するには、スクリプトの末尾にコメントなど(または'__END__'の後ろに)余分な文字列を付加します。
# 選択部分の文字列を取得 $sel = GetSelectedString(); : :(何か一連の処理) : InsText($result); #padding #padding #paddingこの問題についての詳細
Perlには非公式にMsgBox関数がありますので、WScript.ShellのPupupよりもお手軽です。
MsgBox($Message [, $Buttons [, $Title]]);
以下のように別プロセスで実行します。
system 'perl -e "use Tk; my $mw = MainWindow->new(); MainLoop();"'
「use strict;」とすると「$Editor->マクロ関数名();」の書式では動作しません。 Editorオブジェクトを省略するか、「our $Editor;」で回避できます。
use strict; our $Editor; $Editor->InsText('<br />'); InsText('<br />'); # Editorオブジェクトの省略
ファイルパスを利用した変数($0)、関数()、モジュール(IPC::Open2)は使えません。ただし、open() や Cwd は問題なく使えます
COMオブジェクトの使用やScriptControlおよびWSCの取り扱いは、他のWSHマクロと同様です。
# diet.pls SPACEToTAB(); # スペースをタブに置き換え GoLineTop_Sel(); # 選択を崩さずにカーソルを行頭へ $str = GetSelectedString(); # 選択範囲を Perl 側に貰う if(! $str){exit;} foreach(split(/\r\n/,$str)){ $wk = $_; $wk =~ s/[\t ]*$//; $wk =~ s/^[\t ]*//; if($wk ne $bk){ $bk = $wk; $rtn = $rtn . $wk . "\r\n"; } } InsText($rtn); __END__ 選択範囲を貰って、その選択範囲を加工内容で置き換える 連続したスペースはタブに置き換えると共に前後のスペース やタブを無視して、中身が同じ行が続いたら Uniq と 同様にカットするバイト数のダイエットです。
# KeySend.pls $| = 1; use Win32::OLE; $WshShell = Win32::OLE->CreateObject("WScript.Shell"); system('C:\WINDOWS\notepad.exe'); $WshShell->Sleep( 3000 ); $WshShell->SendKeys("TEST"); __END__ プログラムを起動してキーを送って操作する
# testFSO.pls use Win32::OLE; $FSO = Win32::OLE->CreateObject("Scripting.FileSystemObject"); $FILE = $FSO->GetFile('C:\Program Files\sakura\sakura.exe'); MsgBox ($FILE->Type, ,'', $FILE->Name); __END__ FileSystemObjectを使用してファイルの種類を取得します。
# MarkCollect.pls $orgLn = ExpandParameter('$y'); GoFileTop(); BookmarkNext(); $newLn = ExpandParameter('$y'); while($oldLn < $newLn){ GoLineTop( \x01 ); GoLineEnd_Sel(); $str = GetSelectedString( 0 ); GoLineTop( \x01 ); if($oldLn < $newLn){ $str =~ s/\w+$//; $outStr = $outStr . $str . "\r\n"; $oldLn = $newLn; BookmarkNext(); $newLn = ExpandParameter('$y'); } } use Win32::Clipboard; $CLIP = Win32::Clipboard(); $str = GetSelectedString(); $CLIP->Set( $outStr ); Jump($orgLn, 0); __END__ ファイル内のマークしてある行を全部集めて繋いで クリップボードに格納する。 最初に、ExpandParameter('$y') は、現在のカーソル が何行目かを退避して最後に Jump() で戻してます。