プラグイン:
説明
PPx用JScriptを書くときのTips。自分が忘れないように書きとどめ。
実行順の制御
%K
と%K[ID]
では実行される順序が異なる。
下はエントリリスト更新後に”dummy-entry”を挿入するコードだが、IDありの場合
想定通りの動作にはならず”dummy-entry”挿入後にリストが更新される。
// IDなし
PPx.Execute('%K"@F5"');
PPx.EntryInsert(0, 'dummy-entry');
// IDあり
PPx.Execute('%KC"@F5"');
PPx.EntryInsert(0, 'dummy-entry');
このようなケースでは、*wait 0,n
を挟むことで実行する順序を制御できる。
PPx.Execute('%KC"@F5"');
PPx.Execute('*wait 0,1');
PPx.EntryInsert(0, 'dummy-entry');
PPXSCR.TXTではPPx.Sleep(0)
で説明されているが、*waitの仕様が変わったためか
PPx.Sleep(0)
および*wait 0
ではスレッドは変更されない。
実行順の制御(メッセージループ)とスレッドの制御はたぶん関係ないので上の説明は勘違いです。
単純に*wait 0
と *wait 0,n
では結果が異なる。
別PPx上でのコマンドの終了コード取得
PPtrayから実行したスクリプトで、PPc[A]上でのコマンド終了コードを得るには以下のようにする。
// 戻り値は、実行="1"、キャンセル="0"
// %*choiceのオプション"-type"によって値は変化する
PPx.Extract('%*extract(CA,"%%*choice()")');
// 戻り値は、実行="1"、キャンセル=""(空文字)
PPx.Extract('%*extract(CA,"*file%%:1")');
コマンド%Q
はPPx.Extract()
では実行されないので%*choice()
を使う。
%*extract()
は、実行(PPx.Execute)系のコマンドを挟んでも最終的に文字を返せば動作するようだ。
*ppcfile
など別スレッドで処理されるコマンドは終了コードを取得できない。
実行速度の違い
自分で計測して判明している明らかな実行速度の違い。
※ミリ秒基準の差。体感速度の違いはないに等しい。
// 速い
PPx.Extract('%*extract("コマンド")');
// 遅い
PPx.Extract('%*extract([ID],"コマンド")');
IDの指定如何によって10倍前後の速度差が出る。これはIDの検索にかかる時間と思われるので、
他のケースでもID検索が発生する場合には同様の速度差が発生するかもしれない。
ただし、%K
と%K[ID]
の速度差は誤差の範囲だったため、Execute系では差はなく
Extract系で差が出ていると推測される。
JScriptとCV8のモジュール間での差異
-
CV8では厳密なフィールド名の指定が求められる。
PPx.Arguments
,PPx.Entry
PPx.arguments
,PPx.entry
- モジュール側で対処されているものも、いくつかある。
PPx.Arguments.Item()
,PPx.Arguments.item()
PPx.Result
,PPx.result
- モジュール側で対処されているものも、いくつかある。
-
PPx.CreateObject()で呼び出せるオブジェクトのオプションを指定できない場合がある。
たとえば、ADODB.Stream
の.Type
、.LineSeparator
などのプロパティ値や、
メソッドの第二引数を指定するとエラーになる場合がある。 -
JScriptではPPx.result
の後にPPx.Quit()
があっても値は返されるが、
CV8では値は返されずに終了する。R3+1でCV8でも値が返されるようになりました
-
CV8では、try文内でfso.CreatTextFile()関数を用いてファイルを生成したときに、
ファイル生成に成功した場合でも例外エラーが発生する。 -
CV8では、PPx.result
の値がbooleanのとき、"True"
"False"
が戻り値となる。R3+2から、
"-1"
"0"
に統一されました - CV8では、
PPx.Echo()
に複数の引数を指定できない。
留意事項
-
PPx.windowIDName
の値は通常アンダースコアを含むが、CZxx形式はアンダースコアを含まない。 %*ppxlist(-C)の値は常にアンダースコアを含むためID名の比較時は注意が必要。 - 一時メニューを
*deletecust
で削除したあとは%K"@LOADCUST"
する。 同じテーブルを%K”@LOADCUST”なしに繰り返し*deletecustするとPPcが落ちる場合あり。