通常のキーボードやマウスのフックは DLL にエクスポートしたフックプロシージャを使うのだが,C# (.NET) だとこれがうまく出来ないので通常はグローバルフックが出来ないらしい.しかしながら,Low Level Input であればフックがグローバルになるらしく,これを使えば C# でもグローバルフックが出来るとのこと.実際に Web で見つけたソースを元に SetWindowsHookEx に MH_MOUSE_LL を指定してフックしたらうまくいった.ついでにキーボードも問題なく成功.
あとは Low Level Input のレベルでドラッグ中のオブジェクトを取得できるといろいろありがたい.最悪のばあいマウス座標直下にごく小さなウィンドウを作ってドロップのためのイベントを SetInput で投げてしまえば出来るのだが… ドロップ時に何かエフェクトを表示する振りすれば使えそうな手ではある.
- Newer: AWK - はじめ