なぜ、7864322と7864318なのですか?この数字は一体何者ですか?気持ち悪いです。



HHOCKにSetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,0,GetCurrentThreadID);をインストールして、マウスホイールの動きを捉えています。


PMsg^.messageは、WM_MOUSEWHEELです。
ここまではOKです。


Msg^.WParamにIntegerがあります。
ホイール上方向ぐりぐりなら「7864322」で、
ホイール下方向ぐりぐりなら「7864318」です。

なぜ、7864322と7864318なのですか?この数字は一体何者ですか?気持ち悪いです。
また、このIntegerをif 7864322とif 7864318で分岐させて大丈夫ですか?(環境によって他の数字が来たりしませんか?)



質問文が滅茶苦茶ですが、以心伝心してください。日本語とても難しいです。環境はdelphi6personalです。

回答の条件
  • 1人2回まで
  • 登録:2007/10/07 04:48:24
  • 終了:2007/10/07 05:33:24

ベストアンサー

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442007/10/07 05:13:24

ポイント77pt

WM_MOUSEWHEEL通知に対する、wParamの意味は次のとおりです。

上位16ビット:ホイールの回転距離。正の値なら前方向(上方向)の回転、負の値なら後ろ方向(下方向)の回転。120の倍数となる。

下位16ビット:一緒に押されたキーの情報。以下の値のOR値(合計値)になる。

1マウスの左ボタン
2マウスの右ボタン
4SHIFTキー
8CTRLキー
16マウスの中央ボタン
321番目のXボタン
642番目のXボタン


7864322の場合

16進数に直すと、0x00780002となる。上位16ビットは0x0078で10進数に戻すと+120。下位16ビットは0x0002で、つまりマウスの右ボタンが押されていると解釈します。


-7864318の場合(※)

16進数に直すと、0xFF880002となる。上位16ビットは0xFF88で10進数に戻すと-120。下位16ビットは0x0002で、つまりマウスの右ボタンが押されていると解釈します。


※質問どおり7864318(正数)だとすると解釈が矛盾します。正しくは負数ではないですか?上記回答では負数として解釈しました。


上記のようになりますので、if 7864322とif 7864318で分岐すると正しく処理できない場合があります。

delphiは使ったことがないので文法がわかりませんが、wParamの値から上位16ビット分を取り出して、その値が正数か負数かで上方向か下方向かを判断する必要があります。

id:SuzukiU

お手数おかけして申し訳ございません。おっしゃるとおり、右ボタン押し下げ時のwParamの値でした。たいへんよくわかりました。完璧です。

2007/10/07 05:32:51

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません