ShellExecuteでURLをブラウザで開けない – プログラミング – Home

通知
すべてクリア

[解決済] ShellExecuteでURLをブラウザで開けない

固定ページ 1 / 2

ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

開発環境【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を見ましたが、解決方法が見つかりませんでした。
アドバイスよろしくお願い致します・・・。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

> MSDNを見ましたが
MSDNに戻り値に関する記述がありますが、それは確認してみましたか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

ちなみに
> 同じく、第3引数にメールアドレスを指定してみても、
メーラーを起動するには、頭に mailto: をつけないといけないと思います。
# mailtoについては別途調べてください。


返信引用
ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

Blue さま

お返事ありがとうございます!
なるほど、戻り値を確認すればいいのですね。
ShellExecuteでURLを指定した場合の、戻り値を調べてみたところ、戻り値は 
SE_ERR_ACCESSDENIED というものでした。
意味は「オペレーティングシステムが、指定されたファイルへのアクセスを拒否しまし
た。 」ということらしいのですが・・・。
やはりまだよくわかりませぬ。。

それと、メールアドレスをShellExecuteに渡す場合は、mailto:をつけたのですが、
無反応だったのです。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

いや、というか。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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

> 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ブラウザは関連付いていますよね?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

> というぐらいだし、第3引数に指定できるのは、基本的にファイルのみなのでは?
Googleで「ShellExecute URL」で検索するといっぱい出てきますね。
(猫でものサイトにも紹介されています。)


返信引用
ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

reshia さま

最初にWebで調べていたとき、ShellExecute()の第3引数にURLを指定して、
そのURLをもとにブラウザを起動する方法がたくさん紹介されていたので、
「第3引数にはファイルのみ」というわけでもないようです。。

第2引数にexplorer、第4引数にURLという方法を試してみましたが、
戻り値は【SE_ERR_NOASSOC】で、
意味は【指定されたファイル拡張子に関連付けられたアプリケーションがありません。】
という結果でした。

Blue さま

教えていただいた3通りを全て試しましたが、結果はすべて戻り値
【SE_ERR_ACCESSDENIED】でした。
私の環境では、HTMLファイルにはIEが関連づいています。
うーむ。ネットにあふれているShellExecuteでブラウザを起動する方法が、
1つもうまくいきませぬ・・・。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

うーむ。

セキュリティ関係がなんかやってんだろうか?

WindowsXpのSPやエディションによって違うのかも。
(ここは、最初に明記されていないので不明確)

セキュリティソフトがなんかやっているとか。。。わかんね。
# The operating system denied access to the specified file.
# だから関係ないか。。


返信引用
ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

Blue さま

セキュリティソフトをOFFにしてみましたが、結果は変わりませんでした。
使用しているOSは、WindowsXP HomeEdition version2002 SP2 です。

関係ないかもしれませんが、ダイアログベースに開発しています。

うーん・・


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

うちの環境でテストしてみました。

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 を使ってみるとか?


返信引用
ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

PART さま

アドバイスありがとうございます。
教えていただいたコードで実行してみましたが、
やはりSE_ERR_NOASSOCが帰ってきました。
ShellExecuteExも試してみたいと思います。。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

スタートメニューの「ファイル名を指定して実行」から、
explorer http://www.yahoo.com/
で、ちゃんとブラウザが開きます?

うちの環境↓では、開きます。
Windows XP Pro 32bit
McAfeeのインターネット・セキュリティ・スイート
が入っていますが、問題ありませんでした。

これで、開けないようなら、開かないような・・・。


返信引用
ねこまた
 ねこまた
(@ねこまた)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

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/
要求された参照キーは、どのアクティブなアクティブ化コンテキストにも
見つかりませんでした。
_____________________________________

うーん。なにかヒントになりますかね。。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

htmlではなく,httpプロトコルはちゃんと関連付けられていますか?
# HKCR\HTTPが対応

また,ファイル名を指定して実行から試すなら,
explorer http://www.yahoo.comよりも,
http://www.yahoo.comだけを入力した方がよいです。
# 二重引用符内を入力。IEはiexplorerな気が……。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました