如何捕获窗口外面的鼠标点击事件?


用户点击桌面上的任意点(不在目标窗口内),如何用键盘钩子捕获到该消息,或者有更好的办法?

GUI开发 VC

有毒的Nove 12 years, 10 months ago

有几种方法实现:
1.创建一个桌面大小的" 透明窗体 ",并且边框设为0。这样窗口坐标就是桌面坐标,在自己程序的消息循环中捕获鼠标消息就行了。QQ、RTX的"屏幕截图"功能就是这样实现的。

2.使用 SetWindowsHookEx 捕获WH_MOUSE、WH_GETMESSAGE消息。并将SetWindowsHookEx的第四个参数设置为NULL,捕获全局的消息。然后在第二个参数的回调函数中调用CallNextHookEx,以及监听鼠标消息。程序关闭后,别忘记调用UnhookWindowsHookEx。还有就是程序要写在DLL中,因为系统会把它注入到其它进程中去捕获消息的。可以参考网上SetWindowsHookEx实现键盘记录的例子,实现鼠标记录。

3.驱动中Inline Hook Mouclass 鼠标类驱动的 MouseClassServiceCallback 函数,获得鼠标输入。

建议使用1、2中的一种方法。没必要开发驱动,这里只是介绍有几种方法可以获得鼠标全局点击事件。

空气茶泡饭 answered 12 years, 10 months ago

Your Answer