10.50 や 10.51 限定のhack

こんな感じのを “exe_prog_helper2.js”として 適当なところに保存する.”ex. c:\tools\exe_prog_helper2.js”

var a0 = WScript.Arguments(0);
if ( WScript.Arguments.length > 1 ) { for (i = 1; i < WScript.Arguments.length; i++){ a0 += " " + WScript.Arguments(i); } }
a0 = a0.replace( /^ep:\/\//, "" );
var exe = a0.substring( 0, a0.lastIndexOf( "|" ) ).replace( /%20/g, " " );
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");
//WScript.Echo( "Arg0:" + a0 + "\n" + "exe:" + exe + "\n" + "dir:" + workdir + "\n" + "args:" + args + "\n" + "cmdline:" + cmdline );
//WShell.CurrentDirectory = workdir;
//WScript.Echo( WShell.CurrentDirectory );
WShell.Run( cmdline );

この exe_prog_helper2.js を起動するプロトコルとして Opera の Tools,Preferences,Advanced, Programs で ep プロトコルを追加する. 参考画像

さらに,menu.ini で Execute Program していたところ

Item, "Name" = Execute Program, "C:\Path To\Program\foo.exe", "args"

Item, "Name" = Go to page, "ep://C:\Path To\Program\foo.exe|args", 0 & delay 100 & Close page

と Go to page を使って書き換える.Close page は空のページを消すためにつけて,delay は念のために付けておく.

とりあえず,[Document Popup Menu] に追加したこれは動いた.

Item, "InFirefox" = Go to page, "ep://c:\program files\mozilla firefox\firefox.exe|%u", 0 & delay 100 & Close page

ep: 経由で渡されたときには URLEncode されてたりされてなかったりなので,そのあたりの調整とか,複数の引数を渡すときの空白をどうするのかとか,問題は山積みなうえ,希望的観測として 10.51 正式版以降で修正される事なので,どうしても右クリックから Execute Program が使いたい人だけの小ネタ.