ShellEXECUEを使用しての、外部アプリケーションの起動
実際には、HTMLのファイルをブラウザで開く際なのですが
拡張子の関連付けで、IE以外を指定している状態で
(1)ShellExecute(Handle,'Open',PChar(DM1.html_dir + '\optiontest.html'),'','',SW_SHOW);
は、無条件にIEで開きます。
でも こうすると
(2)ShellExecute(Handle,nil,PChar(DM1.html_dir + '\optiontest.html'),'','',SW_SHOW);
関連付けたブラウザで、開きます。
2番目の引数のオペレーションは、指定しなければ Open扱いだと
書いてあったのですが、実際には振る舞いが違うし
Openにすると 無常件にIEになります。
拡張子に関連付けしたプログラムで起動する場合は
(2)が正解なのでしょうか?
((1)、(2)の書き方で なぜ違うのかよくわかりません。)
私の環境(WinXP HOME)では、
・ローカルファイルのHTML
(1),(2) とも標準のブラウザで開きます。
・インターネット上のHTML
(1),(2) とも標準のブラウザで開きます。
・引数を about:blank にする
(1),(2)とも IEが開く。
という感じになりました。
私の環境でも大豆Zさんと同じ結果になりました。
大豆Zさん、傍観者さん わざわざご確認ありがとうございます。
となると・・環境なんでしょうかね・・
試したのは、「Sleipnir」ともう1つはちょっと名前を忘れました。
ソフトの設定でファイルの関連付けした後で、レジストリを見てみました。
htmlfile
shellは、Sleipnirとなっています。
Shell配下のSleipnierのcommandには、Sleipnierのパスがあります。
デフォルトで、Sleipnirが起動します。
(htmlファイル ダブルクリック等で)
Shell配下のopenのcommandには、
"C:\Program Files\Internet Explorer\iexplore.exe" -nohome
が設定されています。
(この為、openはIEになるのかな?)
このため、open指定をすると、ieとなるのかと?
この件は、私の拙作ソフトをお使いの方からの指摘で気が付きました。
(open付きで、デフォルトのブラウザが起動すると思い込んでいました)
この様な、状態が通常ではないのでしょうか?
NET上の書き込みを色々調べていて 正にこの現象の
納得できる書き込みを見つけました。
標準の設定(ダブルクリック等で開く)<> Open
通常ダブルクリックをすると、その拡張子の設定の
Shellを見て、値が設定してあれば その値で
無ければOpenを参照
さらに、Openも無ければ 登録されているその他の動作のようです。
私のPCではHKEY_CLASSES_ROOT\htmlfile は 上記の例で行くと
Shellに、Sleipnierが設定してあります。
ですので、ダブルクリックすればSleipnierが起動しますが
ShellExecuteでOpenを指定した場合 その設定
この場合IEが動作したようです。
試しに、Shellの値を消去すると Openを指定しなくても
Ie(Openに制御が)が起動しました。
Shellの引数にOpenを指定しなければ Oepnとなるとはありますが
実際にはShellの値が最優先のようですね。
今回のように、ブラウザを起動する場合には 環境によっては
Openでは無くShellに設定されている場合があるので
引数はnilとする方法を取る必要があるのでしょうね・・
皆さんは、どうされていますでしょうか?
わたしなら、迷わずエクスプローラと同じ動作をする方を選びます。
りおりおさん、ありがとうございます。
そうですね、htmlの場合は Openの引数なしで
使うことにします。
ツイート | ![]() |