2

バックグラウンド:

IWebBrowser2 を作成し、URL に移動しています。これはコードの短いバージョンです:

IWebBrowser2* pWebBrowser = NULL;
hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void **)&pWebBrowser);
hr = pWebBrowser->Navigate(bstrURL, &varFlags, &varEmptyStr, &varEmptyStr, &varEmptyStr);
hr = pWebBrowser->put_Visible(VARIANT_TRUE);
// Get the handle of the IE window 
HWND handle = NULL;
hr = pWebBrowser->get_HWND((long*)&handle); // this could be done better with reinterpret_cast
…

問題:

get_HWND の呼び出しが 0x80004005 エラー コードで失敗することがあります。一部のワークステーションでのみ失敗します。

質問:

  1. get_HWND の呼び出しがランダムに失敗するのはなぜですか?
  2. get_HWND の使用は正しく行われていますか? 予想されるタイプは SHANDLE_PTR です。

役に立つかもしれないいくつかのリンク:

http://msdn.microsoft.com/en-us/library/aa752126%28v=vs.85%29.aspx http://codecentrix.blogspot.com/2007/11/when-iwebbrowser2gethwnd-returns-efail.html

追加情報が必要ですか? 私に知らせて

ありがとうございました!

4

1 に答える 1

1

get_HWNDの呼び出しは問題なく、インスタンスが強制終了されるとランダムに失敗します。なんで?

CLSID_InternetExplorerを指定してCoCreateInstanceを呼び出すと、整合性レベルの低いプロセスがインスタンス化されます。ナビゲートする URL の整合性レベルが低い場合 (インターネット サイトの場合)、問題はありません。一方、中程度の整合性レベル (イントラネット/信頼できるサイトの場合) にバインドされている URL に移動すると、プロセスが強制終了され、中程度の整合性レベルの新しいプロセスが作成されます (IE8 以降ではシームレスに) )。この操作を「仮想タブ スイッチ」と呼びます。</p>

問題とその解決方法の詳細については、次を参照してください。

http://blogs.msdn.com/b/ieinternals/archive/2011/08/03/internet-explorer-automation-protected-mode-lcie-default-integrity-level-medium.aspx

http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx

Windows Internet Explorer 8。 Windows Vista で、中程度の整合性レベルで実行される Internet Explorer のインスタンスを作成するには、CLSID_InternetExplorerMedium (exdisp.idl で定義) を CoCreateInstance に渡します。結果の InternetExplorerMedium オブジェクトは、InternetExplorer オブジェクトと同じイベント、メソッド、およびプロパティをサポートします。

おそらく、これが実際に直面している問題であることを確認したいと思うでしょう。クイックテストを実行する方法は次のとおりです。

  1. インターネットを開く
  2. 設定に移動
  3. セキュリティタブ
  4. ローカル イントラネット
  5. 「サイト」ボタンをクリック
  6. 「イントラネット ネットワークを自動的に検出する」のチェックを外します</li>

これにより、仮想タブスイッチが抑制されます

IE 整合性レベルのテスト

保護モードに関する追加情報は次のとおりです (Pro Internet Explorer 8 & 9 Development: Developing Powerful Applications for the Next Generation of IE by Matthew Crowley の本から引用):

Windows Vista では MIC の概念が導入されました。MIC では、整合性レベル (IL) を使用してファイル システム オブジェクト、レジストリの場所、および API を信頼レベルと特権レベルで区別し、ユーザー アカウント制御 (UAC) を使用してユーザーへの昇格要求を処理します。このアーキテクチャは、信頼されていないアプリケーションによる悪意のあるアクセスからシステム ファイルとユーザー ファイルを保護するのに役立ちます。

Windows Vista 以降に存在する整合性レベルは、次の4 つの主要なカテゴリに分類されます。

システム: コア オペレーティング システム (NTAUTHORITY); システム コンポーネント、ファイル、およびデータ

: マシン レベルのアクセス (管理者)。プログラム ファイルとローカル マシンのレジストリ ハイブ

: ユーザー レベルのアクセス (ユーザー)。ユーザー ファイルと設定、および現在のユーザー レジストリ ハイブ

: 信頼されていないコンテンツ、一時ファイル、およびデータ

于 2015-01-09T19:27:44.873 に答える