日本語文字列を使用すると動作がおかしくなります。 文字数とバイト数の区別があいまいなため、日本語を使用した文字分だけ スクリプトの最後が削られていきます。
この問題を回避するには、スクリプトの末尾にコメントなど(または'__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() で戻してます。