2007年8月23日木曜日

キーボードとマウスのフック(3)

解決・・・!

別プロセスを起動する際にProcessクラスを利用して終了時イベントを拾っていたんだけど、これに関連していた。
どうやらSystem.Windows.Forms.Application.RemoveMessageFilterメソッドは自分自身のスレッドではなく、カレントのスレッドに対して行われる操作らしい。別プロセスが完全に終了しきっていない、Process.Exitイベント内部だと呼び出し先のAPのスレッドになってしまうのかな?フィルタが解除されないのはそういった理由だと思われる。完全に終了するまでループさせて、その後にフィルタ解除するようにすると問題なく解除できた。

ちなみにそのおかげである状態までロジックでウエイトをかけるやりかたも決定できたよ。
Do While 条件
    System.Threading.Thread.Sleep(1)
    System.Windows.Forms.Application.DoEvents()
Loop
これでいくと単純にループして待ったときのようにCPU100%にはならずに、ついでに再描写なども起こってくれる待ちロジックになったね。
でもなんかApplicationクラスの動きとしては変な感じがするなぁ、コレ。

0 件のコメント:

コメントを投稿