Opera 9.5 で Execute Program が云々

Opera 9.5 での困った話のひとつとして 内部アクションのExecute Program の引数の解釈が変わったなんて話がありまして. 詳しくは続Execute programについてにまとまってます.

9.5になってからは 内部アクション Delay を使うことで時間差で処理できるようになったので,プロンプトを出してどうにかするopera_exの代替という解決法もあるにはあるけども,menu.iniを書き換えて指定しなおしてとちょっと面倒だったわけで.

opera_exだけなら,いいんですけどほかにも irvine.js が動かないとかもあってどげんかせんと(略

で,とりあえず irvine.js を直してスレに晒したのがこれ.irvine.js

irvine = new ActiveXObject("Irvine.Api");
var str = WScript.Arguments(0).split(/ /);
if (str[0] == 1) {
 irvine.AddUrlAndReferer(str[2],str[(1)],0);
} else if (str[0] == 2) {
 irvine.ClearImportLinks();
 irvine.ImportLinks(str[1],0);
} else if (str[0] == 3) {
irvine.Paste(0);
};

要するに,Splitで引数を配列に戻して呼んでやるという単純な方法. Irvine右クリック拡張は?にあがってる WSH/JScript 経由のものはほとんどこれで対応できるはず.

そいで opera_ex に応用したのがこれopera_ex_helper.js.

OperaのExecute programの問題点はこれで払拭された を受けてさらに修正.カレントディレクトリが変わらない問題と,パスに空白がある場合の問題に対応.feedback多謝.

var exe = "c:\\tools\\opera_ex.exe"; // \をエスケープすること
var cmdline = '\"' + exe + '\"' + " " + ( ( WScript.Arguments.length != 0 ) ? WScript.Arguments(0) : "" );
var WShell = WScript.CreateObject("WScript.Shell");
WShell.CurrentDirectory = exe.substring( 0, exe.lastIndexOf( "\\" ) );
//WScript.Echo( exe ); WScript.Echo( workdir ); WScript.Echo( cmdline ); 
WShell.Run( cmdline );

で,上のコードを opera_ex_helper.js てな感じの名前で保存しておいて, exe の opera_ex.exe へのパスを適宜修正したうえで,menu.iniの opera_ex を使ってた部分,たとえば

Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex.exe","-a -x %u"

Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex_helper.js","-a -x %u"

とすると,opera_exがまた使えるようになるかと.

もうちょっと汎用化してみた

これで,いちいちヘルパーを作らなくてもいけるようになったと思う. exe_prog_helper.js

var a0 = WScript.Arguments(0);
var exe = a0.substring( 0, a0.lastIndexOf( "|" ) );
var args = a0.substring( a0.lastIndexOf( "|" ) + 1 );
var workdir = exe.substring( 0, exe.lastIndexOf( "\\" ) );
var cmdline = '\"' + exe + '\"' + " " + ( args.length != 0 ? args : "" );
var WShell = WScript.CreateObject("WScript.Shell");
WShell.CurrentDirectory = workdir;
WShell.Run( cmdline );

ただし,menu.ini のほうを

Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex.exe","-a -x %u"

Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\exe_prog_helper.js","C:\tools\opera_ex.exe|-a -x %u"

という風に,呼び出すソフトとその引数を |でつなげて Execute program の第2引数に.

opera/tips/opera_ex_helper_wsh_for_kestrel.txt · 最終更新: 2008/09/01 08:10 (外部編集)
 
 
©2008 Another cool website by 80KV