ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

DocumentComplete捕捉成功!アパートのせいだった

2007-11-07 22:32:12 | PG(VC++)

IWebBrowser2のDocumentCompleteイベントが捕捉できなかったのは、どうもアパートメントのせいだったらしい。
イベントが発生するのは別スレッドなのかなーと思っていたので、CoInitializeEx()でマルチスレッドを指定できるというから試しにMTAを指定してみたら、見事にビンゴ!

しかし他の関数を実行してみたら、STAで動いていたのにMTAでエラーになるものを発見。手放しでMTAにすればいいってもんでもないようだ…。

つーわけでJava版にもMTAを指定できるようなメソッドを加えてはみたものの、イベントの捕捉は実装していないし、使い道は無いかなー。

コメント (1)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダイアログのボタンをプログラムから押す方法

2007-10-31 22:39:07 | PG(VC++)

ダイアログのボタンにメッセージを送信してボタンクリックをエミュレートする方法をメモ。

要はボタンのHWNDに対してWM_LBUTTONDOWNとWM_LBUTTONUPを送るんだけど、これがまた思わぬ伏兵にやられて上手くいかないことがあった。とりあえず回避策は分かったけど、もっとバシッと解決できる方法は無いものか(嘆)

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ITravelLogStgが無い?!

2007-10-28 05:13:21 | PG(VC++)

WebBrowserコントロールの履歴を知りたいと思って調べてみたら、ITravelLogStgというインターフェースを使えばいいらしいことが分かって、嬉々として試してみた。

コーディングは比較的簡単に出来たものの、いざ実行してみたら、「インターフェイスが登録されていません」。 はぁ??

確かにレジストリを見てもITravelLogStgが無い。
でも普通にIEで履歴を使って戻ったり進んだりしてるんだけどなぁ。なんでだろ。

まぁそういう訳で動作確認は出来ていないものの、せっかくなのでメモだけしておく。
はぁ…。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

どのHWNDからIHtmlDocumentを取得できるか

2007-10-27 13:58:00 | PG(VC++)

HWNDからWebBrowserコントロールを取得する方法について、今まで他の人のソースを利用させてもらうばっかりで その意味についてあまり考えたことがなかったけど、ちょっと理解できた気がする。

これは、実際にはHWNDからHTMLドキュメントを取得する方法HTMLドキュメントからWebBrowserコントロールを取得する方法の2つの部分に分かれている。

HWNDからHTMLドキュメントを取得するのにWM_HTML_GETOBJECTというメッセージを送ればいいのはソースを見ればすぐ分かるが、「どのHWNDに送るか」が重要だという事が分かっていなかった。
あちこちのHPで出てくるウィンドウクラス名「Internet Explorer_Server」のHWNDでなきゃいけなかったんだ。分かっている人は書いてくれていたのに、理解してない自分のような愚人は軽やかにスルーしていたわけだ。ぐはっ
うーん、だからEnumChildWindows()が使われていたんだなー。なるほど。

(WebBrowserを取得する為のサービスプロバイダーの方については無知なままだ(爆))

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VC++例外

2007-10-21 03:09:34 | PG(VC++)

VC++2005で例外を使う方法をメモ。

VC++4.0を使っていた頃もtry~catchがあるのは知っていたけれど、よく分からないので使ってなかった(苦笑) でもJavaでさんざんtry~catch~finallyを使うようになったので、VC++2005でも使ってみようと思って調べてみたわけ。

__tryとtryの2種類があるのは、構造化例外と標準C++の例外というものだった。__try~__exceptとtry~catch。finallyは特殊。
Javaに慣れた目から見ると微妙に使いづらい…。

でもVC++はJavaに比べるとアクセス違反とかが格段に発生し易いので、その手の例外をキャッチできるのはとにかくありがたい。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする