我正在尝试在mono和x11中实现全局热键。不幸的是,应用程序使用了System.Windows.Forms
,所以我不能使用this question中建议的gdk事件过滤器。
使用XGrabKey
可以工作,但我对事件循环有问题。关闭应用程序时,处理x11事件循环的线程仍挂在XNextEvent
中。有办法吗?我不想使用XPending
进行投票。我可以取消XNextEvent
或发送一个虚拟事件吗?
我正在根窗口上调用XGrabKey
,因此很不幸,我没有得到任何类似DestroyNotify
或UnmapNotify
的事件。
最佳答案
使用XSendEvent
发送XClientMessageEvent
。创建自己的atom并设置事件的Atom
成员,以便根窗口上可能正在监视XClientMessageEvent
的其他应用程序不受影响。
在你的事件循环中,检查这个原子,如果你得到它就退出。