【问题标题】:If while press and holding grabbed key, other keys are also "grabbed"如果在按住被抓取的键的同时,其他键也被“抓取”
【发布时间】:2017-01-21 06:33:32
【问题描述】:

我用XGrabKey抓到了一把钥匙:

int mods = 0;
bool ownerevents = true;
XGrabKey(display, MY_KEYCODE, mods, rootwin, ownerevents, GrabModeAsync, GrabModeAsync);

它成功地抓住了钥匙。在我的示例中,MY_KEYCODE 用于密钥 b。所以现在我的事件循环只有在我按下b 键时才会启动。但是,如果我按住 b 键然后按其他键,这些键也会被报告给我的事件循环并且也被阻止,所以暂时“抓住”。我想在KeyPressed 部分尝试XAllowEvents,但它不起作用。

有没有人知道如何在我抓住的钥匙被抓住的情况下让其他钥匙成功通过未抓取?

【问题讨论】:

  • 不,这是不可能的。一旦按下被抓取的键,就会抓取整个键盘,直到释放该键。你想做什么?
  • 谢谢@n.m。供阅读和评论!当我按下一个键时,应用程序如何发送另一个键。就像我按“e”一样,它应该发送“a”。他们发送到KeyRelease 吗?
  • 这通常通过重新映射一个键来完成。
  • 噢,谢谢@n.m。 !
  • @n.m.请您将这两个 cmets 作为解决方案发布,以便我接受。我想向你表达我的感激之情:)

标签: x11 xlib xorg xcb


【解决方案1】:

不可能做你想做的事。一旦按下被抓取的键,就会抓取整个键盘,直到释放该键。

如果您想以编程方式全局替换绑定到某个键的键符,这通常通过键重新映射来完成。请参阅 XChangeKeyboardMappingXkbChangeMap

如果您只想永久地重新映射一个键而不关心它是如何完成的,您可能想要编写/修改一个配置文件,而根本不用编程。请参阅xmodmapxkbcomp

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2020-11-23
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2021-12-15
    • 2021-12-23
    相关资源
    最近更新 更多