====== Opera 9.5 で Execute Program が云々 ====== 2008-12-20 9.63 で空白区切りは改善したものの,カレントディレクトリが元のままになっていたのに対応.9.5/9.6系を使ってる場合アップデートを Opera 9.5 での困った話のひとつとして 内部アクションのExecute Program の引数の解釈が変わったなんて話がありまして. 詳しくは{{http://fatalerrorjp.blog27.fc2.com/blog-entry-1229.html|続Execute programについて}}にまとまってます. 9.5になってからは 内部アクション ''Delay'' を使うことで時間差で処理できるようになったので,プロンプトを出してどうにかする{{http://suehiro.blog.shinobi.jp/Entry/246|opera_exの代替}}という解決法もあるにはあるけども,menu.iniを書き換えて指定しなおしてとちょっと面倒だったわけで. opera_exだけなら,いいんですけどほかにも irvine.js が動かないとかもあってどげんかせんと(略 で,とりあえず irvine.js を直してスレに晒したのがこれ.[[http://ashula.info/files/opera/tips/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 に応用したのがこれ[[http://ashula.info/files/opera/tips/opera_ex_helper.js|opera_ex_helper.js]]. [[http://fatalerrorjp.blog27.fc2.com/blog-entry-1306.html|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がまた使えるようになるかと. ==== もうちょっと汎用化してみた ==== これで,いちいちヘルパーを作らなくてもいけるようになったと思う. [[http://ashula.info/files/opera/tips/exe_prog_helper.js|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引数に.