アマプログラマーの独り言


IE6でURLが実行できない!

2002年10月22日

ファイルを拡張子に関連付けて実行するには ShellExecute というAPIを使います。
さらに、指定URLを通常のブラウザで起動させるには、このAPIに指定のURLを渡せば開きます。

最近ではバージョン情報にあるURLをクリックすると、その人のHPに飛べたりしますよね?
管理人もそういう処理をしたソフトをいくつか作りました。

しかし・・・。
InternetExplorer 6.0 (管理人は現在SP1)では、どーも動作がおかしい。
関数自体は「成功したよ」といった結果を返してくる。
しかし、ブラウザは真っ白。
なにも表示されない。
おかしいなぁ・・・。
メールアドレスは大丈夫だし、ファイルの実行もできてるしなぁ。

ってな現象が出てしまう人!
その現象、たろ@管理人が原因を発見しましたっ!
っつても、ただブラウザに渡されてるコマンドラインがおかしかっただけですけど。

まずレジストリエディタで以下のキーを参照しましょう。

HKEY_CLASSES_ROOT\http\shell\open\command\

ここです。
関連付けに詳しい人ならすぐ分かると思います。
ここが言うなればURL関連付けの設定です。
URLが http:// であれば、ここのコマンドラインでブラウザが起動します。
ちゃんとIE6が指定されていると思います。
しかし、よーく見てください。

"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome

ってなってません?
これではいけません。
-nohome というのはIEのオプションで、ホームページを開かないという意味です。
これはあまり関係ありませんので無視です。
BATファイルでもそうですが、引数を受け取る場合 %1 という指定が必要です。
%1 とは第一引数という意味を持ちます。
つまり、ブラウザをコマンドラインで実行する場合

"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome http://www.yahoo.co.jp/

ってな風にしないとダメなのですが、上の例だとそのまんま

"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome

ってなってしまっているんです。
これだと -nohome が指定されているんで、どのページも開かずにブラウザだけ起動してしまいますよね。
ハッハッハ(?)

って事で、正しくは

"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome %1

としましょう。
これでURLが実行できるハズです。
もしURLにスペースが入ってしまう場合(あるのか?)「そこで引数が区切られた」とIEが勘違いしてしまうので

"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome "%1"

とやると尚良しです。


どうやら原因は初期設定が問題であって、APIの呼び出し方、ましてやAPI自身でもなかったようです。
GUIに慣れきると、こういうのを案外見落としたりするのかもしれないですね。


お前の事だよマイクロソフト