C# デスクトップの何もないところでのダブルクリックを拾いたい

投稿者: Anonymous

お世話になります。

ふと思いついて、こういうことはできるだろうかと思っての質問なのですが、
フォーム上ではなく、デスクトップの何もない場所でマウスのダブルクリックを
拾って処理をさせたいと思ったのですが、C#でその方法があればお教えください。

少しサイトで調べてみましたら、やはりAPIを使わないと無理だとかなんとか。
それならそれでも仕方ないのですが、もしできるのであれば、C#のみでできる方法、
不可能ならばAPIを絡めた方法をお願いします。

勿論、事前に非表示のC#で組んだプログラムが常駐のような形で動いているものとしてです。

以上、よろしくお願いいたします。

解決

デスクトップと言えど単なるウィンドウです。ウィンドウメッセージはWindowProcで処理されますが、これはSetWindowLongPtr()を使うことでフックすることはできますが

An application can subclass a system class, but should not subclass a window class created by another process.

と記載されており外部からフックすべきではありません。
それとは別にSetWindowsHookEx()を使うことで外部からフックすることはできますが、How to set a Windows hook in Visual C# .NETでも

Global hooks are not supported in the .NET Framework

と説明されているようにC#では実現できません。C/C++を使用したネイティブのDLLを作成する必要があります。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *