首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用键盘,但继续获取事件

禁用键盘,但继续获取事件
EN

Stack Overflow用户
提问于 2018-09-15 08:10:57
回答 1查看 227关注 0票数 4

我有一台触摸屏笔记本,可以向后折叠,变得像平板电脑一样。如果我把它放在桌子上,我不想意外地击键,所以我正在编写一个脚本,当我按Ctrl-F10组合键时禁用键盘,然后再次按Ctrl-F10组合键时重新启用它。我使用的是来自PyPI的xlib,到目前为止我已经得到了如下结果:

代码语言:javascript
复制
from Xlib.display import Display
from Xlib.ext import xinput

class Handler:
    def __init__(self, display):
        self.enabled = True
        self.display = display

    def handle(self, event):
        if event.data['detail'] == 76 and event.data['mods']['base_mods'] == 4:
            if self.enabled:
                self.display.grab_server()
            else:
                self.display.ungrab_server()
            self.enabled = not self.enabled

try:
    display = Display()
    handler = Handler(display)
    screen = display.screen()
    screen.root.xinput_select_events([
        (xinput.AllDevices, xinput.KeyPressMask),
    ])
    while True:
        event = display.next_event()
        handler.handle(event)
finally:
    display.close()

它确实禁用了Ctrl-F10上的键盘,但只要我重新启用它,当它被禁用时,我按下的所有键都会同时激活。有没有办法在重新启用前清除队列,或者有更好的方法禁用键盘?

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 15:12:36

试试XGrabKeyboardhttps://tronche.com/gui/x/xlib/input/XGrabKeyboard.html

(但这需要您创建自己的窗口来抓取;例如,您可以在-10x-10位置创建一个大小为1x1的窗口)

我认为像owner_eventskeyboard_mode这样的东西的值并不重要。主要效果应该是输入焦点转到您自己的窗口。time应为CurrentTime (即0),pointer_mode应为GrabModeAsync,这样您就不会干扰指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52340527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档