私はC++ Builder XE7でプロジェクトを作成しています。このプロジェクトでは、ボタンをクリックしてWebリンクを開くことができます。サポートページを開いたり、ソーシャルメディアで彼の経験を共有したりすることができます。そのために、私はShellExecute()
関数を使用し、1つのボタンを除いてうまくいきます。ShellExecute(およびShellExecuteEx)はURLには何もしません
このボタンをクリックすると、何も起こりません。 ShellExecute()
関数はエラーなしで返されます(戻り値は42)が、デフォルトのブラウザは開かず、Webページはまったく表示されません。
::SHELLEXECUTEINFO info;
std::memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.hwnd = handle;
info.lpVerb = "open";
info.lpFile = url.c_str();
info.nShow = SW_SHOWDEFAULT;
if (!::ShellExecuteEx(&info))
url
パラメータは、私がオープンしようとしているWebサイトのリンクが含まれています
は、ここに私のShellExecute()
実装
const HINSTANCE result = ::ShellExecute(handle, "open", url.c_str(), NULL, NULL, SW_SHOWDEFAULT);
私もShellExecuteEx()
機能を試してみましたです。セキュリティ上の理由から、私はサンプルとしてここに投稿することはできませんが、ブラウザ(FireFox)でテストしてもうまく動作します。一方、url
のコンテンツをGoogleのウェブサイトに置き換えてコードを実行すると、すべて正常に動作します。
handle
は、親フレームのパラメータのちょうどHandle
です。
また、hwnd
フィールドとnShow
フィールドのように、ShellExecute/Ex()
のパラメータを微調整しようとしましたが、変更はありませんでした。
誰かが間違っていることを指摘できますか?
あなたは[MCVE]投稿もらえますか?また、デフォルトのブラウザは何ですか?もしあなたがStart-Runを実行し、 'http:// www.stackoverflow.com /'のようなURLを入力すればどうなるでしょう。 –
私は残念ながら、より多くのコードを公開することはできません。 ShellExecute()を呼び出す前のコードは、関数内のURLの構築だけであり、表示することはできません。呼び出し元側では、この関数はボタンの親のハンドルを持つボタンイベントの内部で呼び出されます。したがって、上記のコードは、すでに提供されている最も簡単なコードサンプルです。 –
Windowsの設定で問題はありません。上記の記事で述べたように、私のデフォルトのブラウザはFireFoxで、Start-Runは提供されたリンクを期待通りに開きます。また、コード内の同じShellExecute()は、http://www.google.comのような単純なリンクでうまく動作します。しかし、ShellExecute()自体の動作自体は私のURLでは非常に奇妙です。何もせずにエラーが返されるのはなぜですか? ShellExecute()バグがありますか? –