【发布时间】:2016-08-22 19:12:02
【问题描述】:
总体目标类似于 Windows 的 Alt-Tab,因此我将使用这些键进行说明。我要:
按 Alt -> 按 Tab -> [弹出窗口出现] -> 按住 Alt 随时按 Tab -> 松开 Alt -> [弹出窗口消失]。
我无法检测到最终的 Alt 版本。
-
简单的方法:抓住 Alt-Tab:
XGrabKey (dpy, XKeysymToKeycode(dpy,XK_Tab), Mod1Mask, root, True, GrabModeAsync, GrabModeAsync);(完整代码:http://pastebin.com/K2P65KJn)
结果:
[ 按下 Alt ]
[ 按下标签 ]
报告按 Alt-Tab
[标签发布]
发布 Alt-Tab 报告
[ Alt 已发布 ] -> 没有任何报道 -
同时使用 Alt-Tab 和 Any-Alt:
XGrabKey (dpy, XKeysymToKeycode(dpy,XK_Tab), Mod1Mask, root, True, GrabModeAsync, GrabModeAsync); XGrabKey (dpy, XKeysymToKeycode(dpy,XK_Alt_L), AnyModifier, root, True, GrabModeAsync, GrabModeAsync);(完整代码:http://pastebin.com/75mD1tjA)
有效!
[ 按下 Alt ]
按 Alt 报告
[ 按下标签 ]
报告按 Alt-Tab
[标签发布]
发布 Alt-Tab 报告
[ Alt 已发布 ]
发布 Alt-Alt 报告但这会隐藏任何正在运行的程序的任何 Alt 组合。 我找不到回退不属于我们的事件的方法(尝试过 XSendEvent),总体而言,从一开始就抓住 Alt 看起来太有侵略性了。
-
在第一次按下 Alt-Tab 后抓住 Alt,然后在松开 Alt 后取消抓住 Alt。
很遗憾,仍然没有报告第一个 Alt 版本:
[ 按下 Alt ]
[ 按下标签 ]
按 Alt-Tab 报告,Alt 抓到这里
[标签发布]
发布 Alt-Tab 报告
[ Alt 发布 ] -> 没有报告!报告了随后的 Alt 按下/释放,但没有用:
[ 按住 Alt ]
按 Alt 报告
...
我需要搞乱低级 xinput 还是有其他方法可以实现目标?
【问题讨论】:
-
也许用
XAllowEvents重播事件有效?如果没有,我认为您可能确实必须去 Xinput2。您也可以尝试在 xorg 邮件列表上询问这个问题,因为 SO 上的 X 社区相当稀少。 -
XGrabKey 比较贪心;您是否尝试过处理常规的 XKeyPress/ReleaseEvents?