質問: C#のプログラム上から特定のウィンドウハンドルを取得して、 そのウィンドウがマウス等の操作によってOSから受信したメッセージを プログラム上で確認したいのですが可能でしょうか。 具体的にはspy++を用いて確認できるメッセージを プログラム上から取得したいのです。 イメージとしては下記のようなメッセージ情報を取得できることを期待しています。 ``` 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 ``` よろしくお願いします。
回答: C#からは不可能です。 WindowsにはHook機能.aspx)が提供されていて、その中でもWH_GETMESSAGEフック.aspx#whgetmessagehook)を使用することでウィンドウがメッセージを受信するタイミングをフックすることができます。 ただし、Windows全体はネイティブコードで動作していてこのHook機能においてもネイティブコードが要求されるのに対し、C#言語は.NET Framework上のマネージドコードで動作しているためこのHook機能を利用することができません。 C++言語などを利用して実現することを検討してください。