質問: お世話になります。 ふと思いついて、こういうことはできるだろうかと思っての質問なのですが、 フォーム上ではなく、デスクトップの何もない場所でマウスのダブルクリックを 拾って処理をさせたいと思ったのですが、C#でその方法があればお教えください。 少しサイトで調べてみましたら、やはりAPIを使わないと無理だとかなんとか。 それならそれでも仕方ないのですが、もしできるのであれば、C#のみでできる方法、 不可能ならばAPIを絡めた方法をお願いします。 勿論、事前に非表示のC#で組んだプログラムが常駐のような形で動いているものとしてです。 以上、よろしくお願いいたします。
回答: デスクトップと言えど単なるウィンドウです。ウィンドウメッセージは`WindowProc`で処理されますが、これはSetWindowLongPtr().aspx)を使うことでフックすることはできますが > > An application can subclass a system class, but should not subclass a window class created by another process. > > > と記載されており外部からフックすべきではありません。 それとは別にSetWindowsHookEx().aspx)を使うことで外部からフックすることはできますが、How to set a Windows hook in Visual C# .NETでも > > Global hooks are not supported in the .NET Framework > > > と説明されているようにC#では実現できません。C/C++を使用したネイティブのDLLを作成する必要があります。