teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記、改行部分を修正

2017/12/20 09:04

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -2,13 +2,14 @@
2
2
 
3
3
  `WM_LBUTTONDOWN`はWindowメッセージを示す値なのでフック用プロシージャのnCodeに入るはずです。
4
4
  WM_LBUTTONDOWNメッセージの場合、wParam は仮想キーコード、lParamはマウスのX,Y座標です。
5
+ **※※追記していますが、これは私の間違いです。※※**
5
6
 
6
7
  詳細はMSDNをご覧ください。
7
8
  [WM_LBUTTONDOWN message](https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms645607(v=vs.85).aspx)
8
9
 
9
10
  ---
10
11
  追記(2017/12/20)
11
- +評価をいただいていましたが、コメントでご指摘のようにマウスフック用のプロシージャのnCodeにはWM_LBUTTONDOWNは入りません。この点、私の間違いでしたのでお詫びいたします。機会があれば回答の評価を下げてください。すみません。
12
+ +評価をいただいていましたが、コメントでご指摘のようにマウスフック用のプロシージャのnCodeにはWM_LBUTTONDOWNは入りません。質問者様のコードで正しいです。この点、私の間違いでしたのでお詫びいたします。機会があれば回答の評価を下げてください。すみません。
12
13
 
13
14
  ---
14
15
  追記#2(2017/12/20) 動作を確認しました。
@@ -19,8 +20,7 @@
19
20
  結果、マウスを動かさなくても(マウスカーソルを動かさない)、WM_MOUSEMOVE時にプロシージャが呼ばれました。
20
21
 
21
22
  ただ、左クリックでは`WM_LBUTTONDOWN`、右クリックでは`WM_RBUTTONDOWN`の時に期待するように呼ばれています。WM_MOUSEMOVEはマウスの操作にもよりますが、左クリックでは
22
- WM_LBUTTONDOWN --> WM_MOUSEMOVE --> WM_MOUSEMOVE とのように複数回呼ばれました。
23
+ WM_LBUTTONDOWN --> WM_MOUSEMOVE --> WM_MOUSEMOVE とのように複数回呼ばれました。これはWindows 7(64ビット) と Windows 10(64ビット)のどちらでも同じでした。
23
- これはWindows 7(64ビット) と Windows 10(64ビット)のどちらでも同じでした。
24
24
  (プログラムは Visual Studio 2017, .NET Framework 4.6.1で作成)
25
25
 
26
26
  質問者様のケースでも、WM_MOUSEMOVEもあるものの、WM_LBUTTONDOWNも受信できているのではないでしょうか。

2

動作を確認したので更に追記

2017/12/20 09:03

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -8,4 +8,19 @@
8
8
 
9
9
  ---
10
10
  追記(2017/12/20)
11
- +評価をいただいていましたが、コメントでご指摘のようにマウスフック用のプロシージャのnCodeにはWM_LBUTTONDOWNは入りません。この点、私の間違いでしたのでお詫びいたします。機会があれば回答の評価を下げてください。すみません。
11
+ +評価をいただいていましたが、コメントでご指摘のようにマウスフック用のプロシージャのnCodeにはWM_LBUTTONDOWNは入りません。この点、私の間違いでしたのでお詫びいたします。機会があれば回答の評価を下げてください。すみません。
12
+
13
+ ---
14
+ 追記#2(2017/12/20) 動作を確認しました。
15
+
16
+ 私の先の回答、フック用プロシージャのwParamにWM_LBUTTONDOWNが入る件については間違った指摘を載せてしまいすみません。申し訳なかったので、こちらでも動作確認してみました。質問者様がご提示のコードは全部ではないと思いましたので、以下のマイクロソフトのサンプルコードを流用して試しました。
17
+ [Visual C# .NET では、ウィンドウ フックを設定する方法](https://support.microsoft.com/ja-jp/help/318804/how-to-set-a-windows-hook-in-visual-c--net)
18
+
19
+ 結果、マウスを動かさなくても(マウスカーソルを動かさない)、WM_MOUSEMOVE時にプロシージャが呼ばれました。
20
+
21
+ ただ、左クリックでは`WM_LBUTTONDOWN`、右クリックでは`WM_RBUTTONDOWN`の時に期待するように呼ばれています。WM_MOUSEMOVEはマウスの操作にもよりますが、左クリックでは
22
+ WM_LBUTTONDOWN --> WM_MOUSEMOVE --> WM_MOUSEMOVE とのように複数回呼ばれました。
23
+ これはWindows 7(64ビット) と Windows 10(64ビット)のどちらでも同じでした。
24
+ (プログラムは Visual Studio 2017, .NET Framework 4.6.1で作成)
25
+
26
+ 質問者様のケースでも、WM_MOUSEMOVEもあるものの、WM_LBUTTONDOWNも受信できているのではないでしょうか。

1

回答が不適切なので追記

2017/12/20 09:00

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -4,4 +4,8 @@
4
4
  WM_LBUTTONDOWNメッセージの場合、wParam は仮想キーコード、lParamはマウスのX,Y座標です。
5
5
 
6
6
  詳細はMSDNをご覧ください。
7
- [WM_LBUTTONDOWN message](https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms645607(v=vs.85).aspx)
7
+ [WM_LBUTTONDOWN message](https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms645607(v=vs.85).aspx)
8
+
9
+ ---
10
+ 追記(2017/12/20)
11
+ +評価をいただいていましたが、コメントでご指摘のようにマウスフック用のプロシージャのnCodeにはWM_LBUTTONDOWNは入りません。この点、私の間違いでしたのでお詫びいたします。機会があれば回答の評価を下げてください。すみません。