複数のブラウザの立ち上げ方法

[戻る]
キンチ 2003/09/25(木) 08:43:36
VC初心者のキンチと言う物です。
 
ShellExecuteを使用して、Webページをブラウザで起動させることはできたのですが、
次に起動した際に、以前のブラウザに上書きしてWebページが表示されてしまいます。

どうにかして、上書きせずに、新規にブラウザを立ち上げて表示させたいのですが
どこをどういじればいいのかわかりません。

ちなみに下記のようにプログラムしました。
 ShellExecute(NULL, "open", "http://www.yahoo.co.jp", NULL, NULL, SW_SHOW);

ShellExecute以外にもなにか方法があれば教えていただきたいのですが

よろしくお願いします。

環境は Win2000 VC6.0 です。

euro2004 2003/09/25(木) 09:18:39
はじめまして

ShellExecuteってつかったことないので、目的の機能を実現できるか
わかりませんが、コマンドラインから起動するとき
iexplore.exe /n *******(URL)とすると常にするみたいです。
以下のサイトに書いてありました。

http://www5d.biglobe.ne.jp/~rugeye/html/appendix_faq_explorer.html

#参考になりますか?

euro2004 2003/09/25(木) 09:19:07
誤)iexplore.exe /n *******(URL)とすると常にするみたいです
正)iexplore.exe /n *******(URL)とすると常に新規に起動するみたいです


失礼しました。

キンチ 2003/09/25(木) 09:35:40
euro2004さん、返信ありがとうございます。

上記の方法を使うと新規で起動はできそうですが、ブラウザを指示する必要がでてしまい
ます。

できれば起動するブラウザをIEなどで固定したくないんですよね。各PCで関連付けられて
いるブラウザで立ち上がるようになってほしいんですが。


説明不足でした、すいません。

PATIO 2003/09/25(木) 10:41:39
ブラウザの指定をせずに、尚且つブラウザ側の設定も変えずにという事だと
無理なのではと思います。
受け取ったURLに対してどういうアクションを取るかはブラウザ側の判断ですし、
関連付けで起動する限りはその部分を指定する余地はないと思います。
逆に方法があるなら私もぜひ知りたいです。

キンチ 2003/09/25(木) 11:38:59
 そうなんですか、ありがとうございました。
別の方法を考えてみます。

またよろしくお願いします。

sugar 2003/09/25(木) 12:28:36
> 各PCで関連付けられて
> いるブラウザで立ち上がるようになってほしいんですが。
>
単純に、関連付けられているモジュールは何なのかを自分で取得すればよいのでは?
レジストリで情報を取ってこれそうです。
以下のキーなんかどうでしょう?

HKEY_CLASSES_ROOT\http\shell\open\command

キンチ 2003/09/25(木) 13:57:48
sugarさん言う方法で関連付けられているブラウザを取得したいのですが、
レジストリから情報を取得する方法がわかりません。
 
HKEY_CLASSES_ROOT\http\shell\open\command

は、どうすると関連付けられているモジュールを取得できるのでしょうか?

なにか参考になるものがあれば教えていただけないでしょうか。

sugar 2003/09/25(木) 14:23:44
まずはレジストリエディタで上述のキーを参照してみてください。

レジストリ情報の取得は、RegQueryValue()でよいと思います。
※MSDNではRegQueryValueEx()を推奨していますが、"Ex"じゃない方で十分でしょう。

キンチ 2003/09/25(木) 14:46:56
レジストリエディタで、探してみたのですが、上記のキーはありませんでした。
私はなにか勘違いをしているんでしょうか?

euro2004 2003/09/25(木) 15:04:44
WindowsXPですが、ありましたよ。

#HKEY_CLASSES_ROOTを展開して結構下のほうなので
#私も最初は、.httやら.htmlはあるけどhttpがないな?と思いましたが。

キンチ 2003/09/25(木) 15:10:16
すいません。

こっちの勘違いでした。下の方にありました。

注意力が落ちてきてます。

RegQueryValueを使ってパスを取得する方法を調べてみます。

dairygoods 2003/09/25(木) 15:13:40
ファイルに関連付けられているEXEなら、FindExecutableで取得できませんか?

キンチ 2003/09/25(木) 15:34:42
dairygoodsさん、返信ありがとうございます。

ですが、FindExecutableを使うと、ファイル自体が必要となるため、使用したくないんで
す。

拡張子のみで関連付けのEXEを取得するには、レジストリを見るしかないと思っているん
ですが、

瀬戸っぷ [E-Mail] 2003/09/25(木) 16:13:46
> ですが、FindExecutableを使うと、ファイル自体が必要となるため、使用したくないんで
す。

htmlファイルのアイコンが欲しくて、SHGetFileInfo()を使った時も
ファイル実体が必要でした。
私の場合、テンポラリにサイズ0バイトのファイルを一時的に作成して処理しました。

今回の場合、httpに関連付けられているEXEが必要なので、*.htmを作成する方法は
よろしくないかと思います。
(httpの関連付けと*.htmでの関連付けが違うなんてコトはまずないとは思いますけど。)
ちなみに、FindExecutable()でファイル名に"http://127.0.0.1"を渡してみるという方法を
試して見ましたが、
Win98SEではERROR_FILE_NOT_FOUNDでした。(まぁ、ファイルではないですからねぇ…)

と、いうコトでレジストリから取得する方法の方がいいと思います。

ku 2003/09/25(木) 17:37:41
途中でも指摘がありますが
/n
というのは、どのブラウザでも新規にブラウザを起動するのか?

最近はタブ型のブラウザもありますが、
この場合はどうしようもないので、あきらめるで良いのか?

このあたりも、解決(ブラウザにより制限?仕様決め?)した方が良いと思います

キンチ 2003/09/25(木) 18:05:11
[[解決]]
皆さんいろいろとご指摘ありがとうございました。

レジストリから関連付けられているブラウザのパスを取得することができました。
一応は完成のつもりなのですがkuさんの指摘した部分についても考慮したほうが
良さそうですね。

通りすがり 2003/09/26(金) 09:36:42
もう既に質問者の方が解決印つけてるので、今さらアレなんですが、
CreateProcessって、こういう場合使っちゃマズイんですか?
(これだと便乗質問になってしまうのかな?)

PATIO 2003/09/26(金) 09:54:22
必ず新規のウインドウでブラウザを立ち上げるための起動オプションを
渡せればいいだけなので通りすがりさんが言われているようにCreateProcessでも
全く問題ないと思いますよ。

私はむしろブラウザに渡すオプションがブラウザによって違う可能性も大いにあるので
そちらの方が問題だと思います。
要するに起動オプションを知らないブラウザに対して未対応としてエラーにするとか
とりあえず、
/nを渡して駄目ならごめんなさいで逃げるくらいしか方法がないと思うので。

古いスレッドには追加発言できません。