我有一台可以折叠回来的触摸屏笔记本电脑,变得像平板电脑一样。如果我把它放在桌子上,我不想意外敲击键,所以当我按下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上禁用键盘,但是一旦我重新启用,我在禁用时按下的所有键都会立即激活。有没有办法在重新启用之前清除队列,或者更好的方法来禁用键盘?
试试XGrabKeyboard
:https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html
(但这需要你创建自己的抓取窗口;例如,你可以在-10x-10位置创建一个大小为1x1的窗口)
我认为像owner_events
和keyboard_mode
这样的价值并不重要。主要效果应该是输入焦点转到您自己的窗口。 time
应该是CurrentTime
(这是0)和pointer_mode
应该是GrabModeAsync
,这样你就不会干扰指针。