繁体   English   中英

禁用键盘但不断获取事件

[英]Disable keyboard but keep getting events

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

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上禁用键盘,但是一旦我重新启用,我在禁用时按下的所有键都会立即激活。 有没有办法在重新启用之前清除队列,或者更好的方法来禁用键盘?

试试XGrabKeyboardhttpsXGrabKeyboard

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM