開発環境【VC++.NET SDK WindowsXP 】
ねこまたと申します。よろしくお願い致します。
ShellExecute文で、指定したURLをブラウザで開きたいのですが、うまく動作しません。
ShellExecuteで、指定したテキストファイルをテキストエディタで開くことはできるの
で、
それと同じ感じで指定したURLをブラウザで開こうとしても、プログラムがウンともスン
とも言わないのです。
具体的にいうと、
ShellExecute(NULL,open,ReadMe.txt,NULL,NULL,SW_SHOWNORMAL);
↑これはちゃんと動作するのですが、↓これは無反応なのです。
ShellExecute(NULL,open, http://www.yahoo.com/,NULL,NULL,SW_SHOWNORMAL);
同じく、第3引数にメールアドレスを指定してみても、
メールソフトが起動するようなことはありませんでした。無反応です。
MSDNを見ましたが、解決方法が見つかりませんでした。
アドバイスよろしくお願い致します・・・。
> MSDNを見ましたが
MSDNに戻り値に関する記述がありますが、それは確認してみましたか?
ちなみに
> 同じく、第3引数にメールアドレスを指定してみても、
メーラーを起動するには、頭に mailto: をつけないといけないと思います。
# mailtoについては別途調べてください。
Blue さま
お返事ありがとうございます!
なるほど、戻り値を確認すればいいのですね。
ShellExecuteでURLを指定した場合の、戻り値を調べてみたところ、戻り値は
SE_ERR_ACCESSDENIED というものでした。
意味は「オペレーティングシステムが、指定されたファイルへのアクセスを拒否しまし
た。 」ということらしいのですが・・・。
やはりまだよくわかりませぬ。。
それと、メールアドレスをShellExecuteに渡す場合は、mailto:をつけたのですが、
無反応だったのです。
いや、というか。ShellExecute()って、
「指定されたファイルに対して、指定された操作を実行します。」
というぐらいだし、第3引数に指定できるのは、基本的にファイルのみなのでは?
# もしかしたら、第2引数にexplorerを指定して、
# 第4引数にアドレスを指定すればできるかも。
MSDN調べ、ShellExecute()の引数。
第1引数:親ウィンドウのハンドル
第2引数:操作
第3引数:操作対象のファイル
第4引数:操作のパラメータ
第5引数:表示状態
参考URI(切れてると思うので、くっつけて)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpshell/html/_win32_shellexecute.asp
> ShellExecuteでURLを指定した場合の、戻り値を調べてみたところ、戻り値は
> SE_ERR_ACCESSDENIED というものでした。
色々探したんですが、このような判例が見つかりませんでした。
# SE_ERR_ACCESSDENIED Windows 95 only: The operating system denied access to
the specified file.
# といった記述もあったし、.NET Frameworkをつかったプログラムからよぶと帰ってく
る
# といったのもありました。
# どれも、信用性にかけます。(MSDNは具体的な記述はなかった)
ためしに、
ShellExecute(NULL,NULL, http://www.yahoo.com/,NULL,NULL,SW_SHOWNORMAL);
ShellExecuteA(NULL,open, http://www.yahoo.com/,NULL,NULL,SW_SHOWNORMAL);
ShellExecuteW(NULL,Lopen,L http://www.yahoo.com/,NULL,NULL,SW_SHOWNORMAL);
をやってみるとか。(全て戻り値を確認する)
ちなみに、HTMLファイルとWebブラウザは関連付いていますよね?
> というぐらいだし、第3引数に指定できるのは、基本的にファイルのみなのでは?
Googleで「ShellExecute URL」で検索するといっぱい出てきますね。
(猫でものサイトにも紹介されています。)
reshia さま
最初にWebで調べていたとき、ShellExecute()の第3引数にURLを指定して、
そのURLをもとにブラウザを起動する方法がたくさん紹介されていたので、
「第3引数にはファイルのみ」というわけでもないようです。。
第2引数にexplorer、第4引数にURLという方法を試してみましたが、
戻り値は【SE_ERR_NOASSOC】で、
意味は【指定されたファイル拡張子に関連付けられたアプリケーションがありません。】
という結果でした。
Blue さま
教えていただいた3通りを全て試しましたが、結果はすべて戻り値
【SE_ERR_ACCESSDENIED】でした。
私の環境では、HTMLファイルにはIEが関連づいています。
うーむ。ネットにあふれているShellExecuteでブラウザを起動する方法が、
1つもうまくいきませぬ・・・。
うーむ。
セキュリティ関係がなんかやってんだろうか?
WindowsXpのSPやエディションによって違うのかも。
(ここは、最初に明記されていないので不明確)
セキュリティソフトがなんかやっているとか。。。わかんね。
# The operating system denied access to the specified file.
# だから関係ないか。。
Blue さま
セキュリティソフトをOFFにしてみましたが、結果は変わりませんでした。
使用しているOSは、WindowsXP HomeEdition version2002 SP2 です。
関係ないかもしれませんが、ダイアログベースに開発しています。
うーん・・
うちの環境でテストしてみました。
Win2000sp4/VC++.NET2003 でWin32で新規ソリューションを作成し、
#include <shellapi.h>
#pragma comment(lib,shell32.lib)
ShellExecute(NULL, _T(open), _T( http://www.yahoo.com/), NULL, NULL,
SW_SHOWNORMAL);
で検証してみましたが、「標準のブラウザ」で表示されました。
ShellExecuteEx を使ってみるとか?
PART さま
アドバイスありがとうございます。
教えていただいたコードで実行してみましたが、
やはりSE_ERR_NOASSOCが帰ってきました。
ShellExecuteExも試してみたいと思います。。
スタートメニューの「ファイル名を指定して実行」から、
explorer http://www.yahoo.com/
で、ちゃんとブラウザが開きます?
うちの環境↓では、開きます。
Windows XP Pro 32bit
McAfeeのインターネット・セキュリティ・スイート
が入っていますが、問題ありませんでした。
これで、開けないようなら、開かないような・・・。
reshia さま
「ファイル名を指定して実行」で、『explorer http://www.yahoo.com/』と
入力したところ、ちゃんとIEが開きました。
ただ、HTMLファイルをダブルクリックして開いた場合、
IEでなくMozila FireFoxブラウザに関連付けられていました。
ShellExecuteEx()で以下のようにして実行してみました。
_____________________________________
SHELLEXECUTEINFO sei;
ZeroMemory ( &sei, sizeof(sei) );
sei.cbSize = sizeof(sei);
sei.lpFile = TEXT( http://www.yahoo.com/);
sei.lpVerb = TEXT(open);
ShellExecuteEx (&sei);
_____________________________________
結果は下記のようなエラーがメッセージボックスに表示されました。
_____________________________________
http://www.yahoo.com/
要求された参照キーは、どのアクティブなアクティブ化コンテキストにも
見つかりませんでした。
_____________________________________
うーん。なにかヒントになりますかね。。
htmlではなく,httpプロトコルはちゃんと関連付けられていますか?
# HKCR\HTTPが対応
また,ファイル名を指定して実行から試すなら,
explorer http://www.yahoo.comよりも,
http://www.yahoo.comだけを入力した方がよいです。
# 二重引用符内を入力。IEはiexplorerな気が……。