ShellExecuteについて

解決


YUU  2005-04-16 22:03:47  No: 14345

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)の書き方で  なぜ違うのかよくわかりません。)


大豆Z  2005-04-16 22:30:48  No: 14346

私の環境(WinXP HOME)では、
・ローカルファイルのHTML
(1),(2)  とも標準のブラウザで開きます。
・インターネット上のHTML
(1),(2)  とも標準のブラウザで開きます。

・引数を about:blank  にする
(1),(2)とも  IEが開く。

という感じになりました。


傍観者  2005-04-16 22:52:57  No: 14347

私の環境でも大豆Zさんと同じ結果になりました。


YUU  2005-04-17 03:40:31  No: 14348

大豆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付きで、デフォルトのブラウザが起動すると思い込んでいました)
この様な、状態が通常ではないのでしょうか?


YUU  2005-04-17 07:02:07  No: 14349

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とする方法を取る必要があるのでしょうね・・
皆さんは、どうされていますでしょうか?


りおりお  2005-04-17 08:03:07  No: 14350

わたしなら、迷わずエクスプローラと同じ動作をする方を選びます。


YUU  2005-04-17 22:02:07  No: 14351

りおりおさん、ありがとうございます。
そうですね、htmlの場合は  Openの引数なしで
使うことにします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加