VC初心者のキンチと言う物です。
ShellExecuteを使用して、Webページをブラウザで起動させることはできたのですが、
次に起動した際に、以前のブラウザに上書きしてWebページが表示されてしまいます。
どうにかして、上書きせずに、新規にブラウザを立ち上げて表示させたいのですが
どこをどういじればいいのかわかりません。
ちなみに下記のようにプログラムしました。
ShellExecute(NULL, open, http://www.yahoo.co.jp, NULL, NULL, SW_SHOW);
ShellExecute以外にもなにか方法があれば教えていただきたいのですが
よろしくお願いします。
環境は Win2000 VC6.0 です。
はじめまして
ShellExecuteってつかったことないので、目的の機能を実現できるか
わかりませんが、コマンドラインから起動するとき
iexplore.exe /n *******(URL)とすると常にするみたいです。
以下のサイトに書いてありました。
http://www5d.biglobe.ne.jp/~rugeye/html/appendix_faq_explorer.html
#参考になりますか?
誤)iexplore.exe /n ****(URL)とすると常にするみたいです
正)iexplore.exe /n ****(URL)とすると常に新規に起動するみたいです
失礼しました。
euro2004さん、返信ありがとうございます。
上記の方法を使うと新規で起動はできそうですが、ブラウザを指示する必要がでてしまい
ます。
できれば起動するブラウザをIEなどで固定したくないんですよね。各PCで関連付けられて
いるブラウザで立ち上がるようになってほしいんですが。
説明不足でした、すいません。
ブラウザの指定をせずに、尚且つブラウザ側の設定も変えずにという事だと
無理なのではと思います。
受け取ったURLに対してどういうアクションを取るかはブラウザ側の判断ですし、
関連付けで起動する限りはその部分を指定する余地はないと思います。
逆に方法があるなら私もぜひ知りたいです。
そうなんですか、ありがとうございました。
別の方法を考えてみます。
またよろしくお願いします。
> 各PCで関連付けられて
> いるブラウザで立ち上がるようになってほしいんですが。
>
単純に、関連付けられているモジュールは何なのかを自分で取得すればよいのでは?
レジストリで情報を取ってこれそうです。
以下のキーなんかどうでしょう?
HKEY_CLASSES_ROOT\http\shell\open\command
sugarさん言う方法で関連付けられているブラウザを取得したいのですが、
レジストリから情報を取得する方法がわかりません。
HKEY_CLASSES_ROOT\http\shell\open\command
は、どうすると関連付けられているモジュールを取得できるのでしょうか?
なにか参考になるものがあれば教えていただけないでしょうか。
まずはレジストリエディタで上述のキーを参照してみてください。
レジストリ情報の取得は、RegQueryValue()でよいと思います。
※MSDNではRegQueryValueEx()を推奨していますが、Exじゃない方で十分でしょう。
レジストリエディタで、探してみたのですが、上記のキーはありませんでした。
私はなにか勘違いをしているんでしょうか?
WindowsXPですが、ありましたよ。
#HKEY_CLASSES_ROOTを展開して結構下のほうなので
#私も最初は、.httやら.htmlはあるけどhttpがないな?と思いましたが。
すいません。
こっちの勘違いでした。下の方にありました。
注意力が落ちてきてます。
RegQueryValueを使ってパスを取得する方法を調べてみます。
ファイルに関連付けられているEXEなら、FindExecutableで取得できませんか?
dairygoodsさん、返信ありがとうございます。
ですが、FindExecutableを使うと、ファイル自体が必要となるため、使用したくないんで
す。
拡張子のみで関連付けのEXEを取得するには、レジストリを見るしかないと思っているん
ですが、
> ですが、FindExecutableを使うと、ファイル自体が必要となるため、使用したくないんで
す。
htmlファイルのアイコンが欲しくて、SHGetFileInfo()を使った時も
ファイル実体が必要でした。
私の場合、テンポラリにサイズ0バイトのファイルを一時的に作成して処理しました。
今回の場合、httpに関連付けられているEXEが必要なので、*.htmを作成する方法は
よろしくないかと思います。
(httpの関連付けと*.htmでの関連付けが違うなんてコトはまずないとは思いますけど。)
ちなみに、FindExecutable()でファイル名に http://127.0.0.1を渡してみるという方法を
試して見ましたが、
Win98SEではERROR_FILE_NOT_FOUNDでした。(まぁ、ファイルではないですからねぇ…)
と、いうコトでレジストリから取得する方法の方がいいと思います。