在X11中钩住并阻止全局鼠标

时间:2016-12-09 13:35:50

标签: c++ linux hook mouse x11

如果两次点击之间的延迟小于设定的延迟,我需要挂钩全局鼠标点击并阻止最终点击。

我使用WM_MOUSE_LL挂钩为Windows编写了它。 我无法为我找到任何解决方案。甚至可以在X11中全局阻止鼠标点击吗?

Windows full code

1 个答案:

答案 0 :(得分:1)

据我所知,标准X11协议不允许这样做。 XInput 2.0扩展可能,但我怀疑它......虽然Windows假设每个程序都监听一个事件队列,因此程序可以拦截事件并防止它被队列发送到其他侦听器,每个X11客户端都有它自己的独立队列和所有注册事件的客户端在其队列中接收它的独立副本。这意味着在正常情况下,错误的程序不可能阻止其他程序运行;但这也意味着,对于客户端必须阻止其他客户端的那些时间,它必须执行服务器抓取以防止服务器处理任何其他客户端的事件。

这意味着你可以

  • 使用X服务器代理(不会很难,但会慢很多)

  • 在输入设备级别执行此操作。 /dev/input/event<n>为您提供输入事件。您可以读取那里的按键,并决定它们是否应该进一步传播。不幸的是,没有真正的文档,但头文件linux/include/input.h非常自我解释。