2003-01-01 113729 [長年日記]

IWebBrowser2でコマンド実行

ウェブブラウザコントロールでコマンド(コピーとか)を実行するには、IWebBrowser2::ExecWBを使用します。ヘルプを見ると、MSHTMLの方で指定されているIDM_COPYとかを使うように見えるのですが、どうやらICommandTargetの方で指定されているOLDCMDID_COPYとかを使うのが正解っぽいです(値は同じですが)。MSHTMLの方のコマンドを使う場合には、IWebBrowser2からIHTMLDocument2を取得して、IHTMLDocument2::execCommandを使うべきなのでしょう。

コピーが出来るかどうかなどを判定するには、IWebBrowser2::QueryStatusWBを使います。この関数のヘルプはなぜか引数の順番が間違っています。さらに、戻り値のOLECMDFはビットのORで返ってくるので注意です。たとえば、OLECMDF_SUPPORTED | OLECMDF_ENABLEDなんかが返されます。

ウェブブラウザコントロールのフォーカス

どうもメッセージウィンドウを開いた時にフォーカスがウェブブラウザコントロールにいかないので調べてみたところ、IWebBrowser2::Navigate2を呼び出した直後に、IHTMLWindow2::focusでフォーカスを設定しても早すぎるのが原因のようです。しょうがないので、DWebBrowserEvents2::DocumentCompleteをハンドルしてその中でフォーカスを設定するようにしました。


トップ «前の日記(2002-12-31) 最新 次の日記(2003-01-02)»