質問

現在、C#のIEツールバーボタンを開発しています。これは、現在のタブの内容を取得してそれを取り扱えることができると考えられています。ただし、ボタンをクリックすると、iObjectWithSite.SetSite関数が呼び出されます(私のコードは最後に転記されます)、次のエラーを返します。

型のCOMオブジェクトをキャストできません インターフェイスタイプへの 'システム.__ comobject' shdocvw.iwebbrowser2 '。この操作 QueryInterface呼び出しが原因で失敗しました のためのComComenenetで IIDとのインターフェース '

サイトがロードされたときに機能が正しく機能しますが、ツールバーのボタンをクリックするとこのエラーが発生します。前述のように、Setite関数が呼び出され、その後IOleCommandtarget.exec関数が呼び出されます。

だから、私は私の質問があると思います:Internet Explorerが現在開いているタブのドキュメントにアクセスできるように、Setite関数に渡されるオブジェクトを見つけることができますか?

それらの2つの機能のための私の現在の関連コードは次のとおりです。

int IObjectWithSite.SetSite(object site)
{
    String display = "";

    try { browser = (IWebBrowser2)site;}
    catch (Exception e) { display += e.Message + "\r\n"; }

    System.Windows.Forms.MessageBox.Show(display);

    return 0;
}


int IOleCommandTarget.Exec(IntPtr pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
{
    if (form == null)
    {
        form = new SomeForm();
        form.InputText = "";
    }
    form.ShowDialog();
    return 0;
}
.

事前にありがとうございました。

役に立ちましたか?

解決 2

The Exec function calls SetSite before actually executing. In order to work around this and still have the Exec function be able to access information about the browser, the SetSite and GetSite functions should exist in a separate class that the Exec function accesses.

他のヒント

文書化された方法Query IWebBrowser2ツールバーボタンサイトから、ISERVICEPROVIDERをサイトから照会することです.IID_IWebBrowserApp

のQueryService

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top