Windows2000、IE6で(埋め込みではない)リンク先の画像ファイルをブラウザで表示せず、ヘルパーアプリケーションで開く方法はないでしょうか?

URL直打ちだとできるのですが…。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/10/04 00:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ardarim No.1

回答回数897ベストアンサー獲得回数145

ポイント60pt

IEのレジストリをカスタマイズすることで、コンテキストメニュー(右クリックメニュー)に任意のアプリを起動するようにコマンドを追加できます。


(1)以下の内容をメモ帳に貼り付け、適当なフォルダに保存(例えば、C:\test\menuext.js)

<SCRIPT language="JavaScript">

    var appPath = "c:\\program files\\internet explorer\\iexplore.exe";

    var pathToURL=(function(){
        var wimg=new Image();
        var work=external.menuArguments.document.createElement('iframe');
        work.style.display='none';
        external.menuArguments.document.body.appendChild(work);
        var wdoc=work.contentWindow.document;
        return function(path,base){
            var url=path;
            if (!base) {    //  default: location.href
                wimg.src=path;
                url=wimg.src;
            }
            else {
                wdoc.open();
                wdoc.write('<head><base href="'+base+'" \/><\/head><body><img src="'+path+'" \/><\/body>');
                wdoc.close();
                url=wdoc.getElementsByTagName('img')[0].src;
            }
            return url;
        };
    })();

    var url = "";
    var srcNode = external.menuArguments.event.srcElement;
    var curNode = srcNode;

    while(curNode != null && ('tagName' in curNode) && url == ""){
        if(curNode.tagName.toUpperCase() == 'A'){
            url = curNode.href;
        } else {
            curNode = curNode.parentElement;
        }
    }

    if(url == ""){
        if(srcNode.tagName == "IMG"){
            url = srcNode.src;
        }
    }

    if(url != ""){
        url = pathToURL(url, external.menuArguments.location.href);
        var wsh = new ActiveXObject("WScript.Shell");
        wsh.Run("\"" + appPath + "\" \"" + url + "\"");
  
    }
    
</SCRIPT>

緑字の部分は起動したいヘルパーアプリの場所に置き換えてください。(\は\\で置き換えてください)


(2)以下の内容をメモ帳に貼り付け、適当なフォルダに保存(例えば、C:\test\menuext.reg)

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\画像をヘルパーアプリで起動]
@="c:\\test\\menuext.js"
"Contexts"=dword:00000022

赤字の部分はコンテキストメニューに表示する文字列に置き換えてください。

青字の部分は(1)で保存したファイルの場所に置き換えてください。(\は\\で置き換えてください)


(3)(2)で保存したレジストリファイルをダブルクリックする


以上の手順でメニューが追加され、右クリックからヘルパーアプリを起動できるようになります。



参考:

[InetSDK] ブラウザの標準コンテキスト メニューに項目を追加する

風柳亭: 【JavaScript】任意のURLをベースにして、相対パスを絶対パスに変換(クロスブラウザっぽく)

id:moerrari

うーむ、上手く動きません。ヘルパーアプリ(IrfanView)がもともとURLを引数に指定できないからでしょうか?

しかし、ひとまずIEを指定しなおしたところ、そこから更に関連付けでヘルパーアプリが起動するので一件落着です。

またURLにローカルファイルを指定していて、それを開きたいのですが上と同様file:////が引数に指定できなかったため、

最後の部分を少しだけ変えました。

 if(url != ""){
  url = pathToURL(url, external.menuArguments.location.href);
  var wsh = new ActiveXObject("WScript.Shell");
  url = url.replace("file:///","")
  url = url.replace(/\//g,"\\")
  clipboardData.setData("Text", url);
  wsh.Run("\"" + appPath + "\" \"" + url + "\"");

さらに、コンテキストメニューにアクセスキーを設定

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\画像をヘルパーアプリで起動(&I)

良い感じです。

2009/10/02 22:15:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません