ChatteringCancelerバージョンUP経過1

ChatteringCanceler2.0 開発順調!

と行くほど世の中甘くありませんでした・・・。
以下、トラブルの備忘録。
クラス化に伴う移植バグは除いてます。

・Xボタン1/2(いわゆる「戻る」「進む」ボタン)のイベントをフックしない
 正確には、フックしてないのではなくてフックしてるのにイベント判別が誤っていました。

 MSG *msg = (MSG *)lParam;
 MSLLHOOKSTRUCT *mlhs = (MSLLHOOKSTRUCT *)lParam;

 switch(wParam)
 {
  他の処理
 case WM_XBUTTONUP:
 case WM_XBUTTONDOWN:
  switch(HIWORD(mlhs->mouseData))
  {
  case XBUTTON1:
   Xボタン1の処理;
   break;
  case XBUTTON2:
   Xボタン2の処理;
   break;
  }
  他の処理
 }

 変更部分は赤字にしました。違いがお分かりでしょーか。
 WM_XBUTTONUP および WM_XBUTTONDOWN でボタンを判別するためには、MOUSEHOOKSTRUCT のmouseData を参照する必要があるわけですが、ただ参照するとダメで、上位ワードを参照しなければならないということです。

・Xボタン1/2のイベントを発生しても、フックプロシジャでメッセージをフック出来ない
 結果から言えば、Xボタン1/2のイベントを発生させてる「つもり」でした。

 問題のコード(抜粋)

 MSLLHOOKSTRUCT *mlhs = (MSLLHOOKSTRUCT *)lParam;
 INPUT ipSendEvent;

 ipSendEvent.mi.mouseData = mlhs->mouseData;

 修正後のコード

 MSLLHOOKSTRUCT *mlhs = (MSLLHOOKSTRUCT *)lParam;
 INPUT ipSendEvent;

 ipSendEvent.mi.mouseData = XBUTTON1;

 先ほどの件では、Xボタン1/2の判別は上位ワードに格納されているという点が罠でした。
 ところが、SendInputのパラメタでは普通に XBUTTON1 または XBUTTON2 を設定すれば良かったのです。
 MSDNのMOUSEINPUT構造体についての説明を、しっかり読んでいれば気付けたはずでした。

 MOUSEINPUT構造体の解説(MSDN)

 正しいパラメタを設定することで、WH_MOUSE_LL のフックプロシジャで正しくメッセージをフックできるようになりました。


そんなこんなで、どうやらフックDLLのおおまかなところは完成したようです。
一応もう少しメソッドの整理は必要ですが、ロジック的にはおおむね終わりです。
で、残るは設定画面なのですが・・・これがまた・・・ねえ。
画面関係すんげえ苦手なんですよ!!
センスがないというか。
次回の経過報告では、画面レイアウトが出来ているといいなと思う所存。


2009/11/2
画面レイアウトが決まったっぽいです。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック

  • ChatteringCancelerバージョンUP検討開始

    Excerpt: えー長らく放置していたChatteringCancelerですが、そろそろ開発を再開します。 で、追加機能としては Weblog: ヨン様と呼ばないで! racked: 2009-10-31 22:51
  • ChatteringCancelerバージョンUP経過2

    Excerpt: 画面レイアウトをしこしこ作ってみました。 2.0ではこんな設定画面になりそうです。 Weblog: ヨン様と呼ばないで! racked: 2009-11-02 22:44
  • ChatteringCanceler2.0b1リリース

    Excerpt: お待たせしました。 ようやく開発作業が一段落しましたので、2.0をβリリースします。 Weblog: ヨン様と呼ばないで! racked: 2009-11-04 23:48