在 X11 中全局挂钩和阻止鼠标
Hook and block globally mouse in X11
我需要全局挂钩鼠标点击,如果两次点击之间的延迟小于设置值,则阻止最后一次点击。
我使用 WM_MOUSE_LL
钩子为 windows 编写了它。
我无法为我找到任何解决方案。甚至可以在 X11 中全局阻止鼠标单击吗?
据我所知,标准 X11 协议不允许这样做。 XInput 2.0 扩展可能,但我对此表示怀疑。虽然 Windows 假设每个程序都监听一个事件队列,以便程序可以拦截事件并防止它被发送到队列中的其他监听器,每个 X11 客户端都有自己独立的队列,所有对事件感兴趣的客户端都会在其队列中收到该事件的独立副本。这意味着在正常情况下,一个错误的程序不可能阻止其他程序运行;但这也意味着,对于客户端必须阻止其他客户端的那些时间,它必须进行服务器抓取以防止服务器为任何其他客户端处理事件。
这意味着您可以
- 使用 X 服务器代理(不难,但会很慢)
或
- 在输入设备级别进行。
/dev/input/event<n>
给你输入事件。您可以在那里读取按键并决定是否应该进一步传播它们。不幸的是,没有这方面的真正文档,但是头文件 linux/include/input.h
是非常自我解释的。
我需要全局挂钩鼠标点击,如果两次点击之间的延迟小于设置值,则阻止最后一次点击。
我使用 WM_MOUSE_LL
钩子为 windows 编写了它。
我无法为我找到任何解决方案。甚至可以在 X11 中全局阻止鼠标单击吗?
据我所知,标准 X11 协议不允许这样做。 XInput 2.0 扩展可能,但我对此表示怀疑。虽然 Windows 假设每个程序都监听一个事件队列,以便程序可以拦截事件并防止它被发送到队列中的其他监听器,每个 X11 客户端都有自己独立的队列,所有对事件感兴趣的客户端都会在其队列中收到该事件的独立副本。这意味着在正常情况下,一个错误的程序不可能阻止其他程序运行;但这也意味着,对于客户端必须阻止其他客户端的那些时间,它必须进行服务器抓取以防止服务器为任何其他客户端处理事件。
这意味着您可以
- 使用 X 服务器代理(不难,但会很慢)
或
- 在输入设备级别进行。
/dev/input/event<n>
给你输入事件。您可以在那里读取按键并决定是否应该进一步传播它们。不幸的是,没有这方面的真正文档,但是头文件linux/include/input.h
是非常自我解释的。