Mouseevent 如何使用Xlib正确拦截和转发鼠标事件?

Mouseevent 如何使用Xlib正确拦截和转发鼠标事件?,mouseevent,xlib,Mouseevent,Xlib,我正在开发一个简单的Xlib程序,我想截获所有鼠标事件(运动、按钮按下、按钮释放)。我可能想在某个时候对这些数据做些什么,但现在,我只想将这些鼠标事件正确地“转发”到正确的窗口(好像我根本没有拦截它们一样) 目前,我的一般做法如下: 使用XGrabPointer()获取根窗口的指针 接收到事件后,使用XQueryPointer()查找指针所在的子窗口 使用XSendEvent()将事件转发到子窗口 还有一些细节,但这是基本的想法。我一直在Ubuntu Linux上测试我的程序,它似乎在许多情

我正在开发一个简单的Xlib程序,我想截获所有鼠标事件(运动、按钮按下、按钮释放)。我可能想在某个时候对这些数据做些什么,但现在,我只想将这些鼠标事件正确地“转发”到正确的窗口(好像我根本没有拦截它们一样)

目前,我的一般做法如下:

  • 使用XGrabPointer()获取根窗口的指针
  • 接收到事件后,使用XQueryPointer()查找指针所在的子窗口
  • 使用XSendEvent()将事件转发到子窗口
还有一些细节,但这是基本的想法。我一直在Ubuntu Linux上测试我的程序,它似乎在许多情况下都能工作(例如,单击最小化、最大化和关闭按钮都能正常工作)。但是,它并不适用于所有场景,例如单击菜单栏项


总之,我基本上只是希望能够截获鼠标事件,然后将它们转发到适当的窗口,就好像我根本没有截获它们一样。使用Xlib的正确方法是什么

使用Xlib而不是Xlib可能会更成功;xcb删除了Xlib的一些额外功能,可能更容易处理此类任务。(我没有尝试过这两种方法,但xcb的宣传非常强烈。)使用Xlib而不是Xlib可能会取得更大的成功;xcb删除了Xlib的一些额外功能,可能更容易处理此类任务。(我没有尝试过这两种方法,但xcb的宣传非常强烈。)