18115


お世話になります。

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

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

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

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


CC BY-SA 3.0
2015-10-27T04:14:23.123
18111
2015-10-27T05:20:02.360
9374
question
c#
C# デスクトップの何もないところでのダブルクリックを拾いたい


デスクトップと言えど単なるウィンドウです。ウィンドウメッセージは`WindowProc`で処理されますが、これは[SetWindowLongPtr()](https://msdn.microsoft.com/en-
us/library/ms644898\(v=vs.85\).aspx)を使うことでフックすることはできますが

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

と記載されており外部からフックすべきではありません。  
それとは別に[SetWindowsHookEx()](https://msdn.microsoft.com/en-
us/library/ms644990\(v=vs.85\).aspx)を使うことで外部からフックすることはできますが、[How to set a
Windows hook in Visual C# .NET](https://support.microsoft.com/ja-
jp/kb/318804)でも

> Global hooks are not supported in the .NET Framework

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


CC BY-SA 3.0
2015-10-27T05:20:02.360
18115
2015-10-27T05:20:02.360
4236
18111
answer