

C#のプログラム上から特定のウィンドウハンドルを取得して、  
そのウィンドウがマウス等の操作によってOSから受信したメッセージを  
プログラム上で確認したいのですが可能でしょうか。

具体的にはspy++を用いて確認できるメッセージを  
プログラム上から取得したいのです。

イメージとしては下記のようなメッセージ情報を取得できることを期待しています。

[code]

    P WM_MOUSEMOVE fwKeys:0000 xPos:504 yPos:414
    P WM_MOUSEMOVE fwKeys:0000 xPos:505 yPos:414
    P WM_MOUSEMOVE fwKeys:0000 xPos:508 yPos:414
    
[/code]

よろしくお願いします。


CC BY-SA 3.0
2017-07-28T13:03:46.617
36750
2018-07-29T05:01:33.743
2017-07-28T22:06:31.333
4236
24628
question
c# windows
特定のウィンドウが受信したメッセージをプログラム側から観測できるか


C#からは不可能です。

Windowsには[Hook機能](https://msdn.microsoft.com/en-
us/library/ms644959\(v=vs.85\).aspx)が提供されていて、その中でも[WH_GETMESSAGEフック](https://msdn.microsoft.com/en-
us/library/ms644959\(v=vs.85\).aspx#whgetmessagehook)を使用することでウィンドウがメッセージを受信するタイミングをフックすることができます。  
ただし、Windows全体はネイティブコードで動作していてこのHook機能においてもネイティブコードが要求されるのに対し、C#言語は.NET
Framework上のマネージドコードで動作しているためこのHook機能を利用することができません。  
C++言語などを利用して実現することを検討してください。


CC BY-SA 3.0
2017-07-28T22:06:18.337
36755
2017-07-28T22:06:18.337
4236
36750
answer