...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

グローバルフック

Windowsで,実際にはクリックせずに,画面内の任意の座標をクリックしたことにする方法,その2.

1.グローバルフックでWM_LBUTTONDOWNイベントをフックする.
2.指定した座標にあるウィンドウのウィンドウハンドルをWindowFromPoint()で得る.
3.ScreenToClient()でクライアント座標に変換する.
4.元のマウスイベントの代わりに,さっき得たウィンドウハンドルとクライアント座標を使ってWM_LBUTTONDOWNイベントを送信する.

これで,任意のマウスイベントの座標だけを変更できる・・・はず.
かなりいい線までいけているのだが,まだうまく動かない.
選択状態になった直後に解除してしまいおる.
どうやらWM_LBUTTONDOWNが二回発行されているようだ?
元のイベントを抑止できていないのだろうか.
どうやったらできるんだろ?
う〜〜ん.

さらに他の方法のヒントとして,SendInput()とかmouse_event()という関数もあるようだ.