かぶだいくんのメモ(WebBrowser コントロールのフォーカスについて)

かぶだいくんは、オリックス証券の「トレードコンパクト」の画面を .NET の WebBrowser クラスを使って制御しているのだが、どうもこのサイトは JavaScript の setFocus を使っているらしく、WebBrowser をはめこんだアプリケーションがアクティブになってしまい、他のアプリケーションからフォーカスを奪ってしまう。
かぶだいくんを動かしながら、メーラーブラウザーのテキストエリアに文字入力していたりしていても容赦なくフォーカスがなくなってしまい、非常に使いづらかった。
今まで対処方法が分からなかったが、要は WebBrowser を画面に貼らなければ良いと気付いた。すなわち、

WebBrowser webBrowser = new WebBrowser();

としたあと、そのインスタンスを Form などに貼り付けなくても動くし、そうしておけばフォーカスの制御もしなくなるようだ。画面からまったく見えなくなるが、どうせプログラムで制御するのだからデバッグがやりづらいだけで、それ以外の問題はない。


ちなみに WebBrowser コントロール以外でも、普通の Form でも親子関係にして使うと、他のアプリケーションからフォーカスを奪ってしまうことがあるようだ。フォーカスで悩んだら、Form は最初の1個のみにして切り分けてみたほうが良いようだ。


この仕組みを取り入れたかぶだいくんのバージョンは 20090915 1 だ。


...ん〜ん、違うな。これだけでは不十分なようだ。
オリックス証券よりも先に、他の証券会社用(SMBCフレンド証券など)にも WebBrowser コントロールを動かしておいてから、その後にオリックス証券にアクセスすると良いみたいだ。複数の WebBrowser コントロール間で Z-Order による優先順位などがあるのかなあ?