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

时间:2011-04-28 23:02:21

标签: mouseevent xlib

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

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

  • 使用XGrabPointer()
  • 抓取根窗口的指针
  • 收到事件后,使用XQueryPointer()
  • 找到指针所在的子窗口
  • 使用XSendEvent()
  • 将事件转发到子窗口

还有一些细节,但这是基本的想法。我一直在Ubuntu Linux上测试我的程序,它似乎在很多场景下工作(例如,点击最小化,最大化和关闭按钮正常工作)。但是,它不适用于所有情况,例如单击菜单栏项。

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

0 个答案:

没有答案