
我发现了问题。我几乎可以肯定xtest.fake_input会做一些奇怪的事情,因为当我手动发送按键和-
releases时(发现了一些代码),它可以工作
这是一个示例,该示例仅吞下按键时的“ 1”键并将按键释放时的“ x”发送到焦点窗口:
from Xlib.display import Displayimport Xlibfrom Xlib import Ximport Xlib.XKimport sysimport signal import timedisplay = Noneroot = Nonedef handle_event(event): print "handle!" if (event.type == X.KeyRelease): send_key("x")# from http://shallowsky.com/software/crikey/pykey-0.1 def send_key(emulated_key): shift_mask = 0 # or Xlib.X.ShiftMask window = display.get_input_focus()._data["focus"] keysym = Xlib.XK.string_to_keysym(emulated_key) keypre = display.keysym_to_keypre(keysym) event = Xlib.protocol.event.KeyPress( time = int(time.time()), root = root, window = window, same_screen = 0, child = Xlib.X.NONE, root_x = 0, root_y = 0, event_x = 0, event_y = 0, state = shift_mask, detail = keypre ) window.send_event(event, propagate = True) event = Xlib.protocol.event.KeyRelease( time = int(time.time()), root = display.screen().root, window = window, same_screen = 0, child = Xlib.X.NONE, root_x = 0, root_y = 0, event_x = 0, event_y = 0, state = shift_mask, detail = keypre ) window.send_event(event, propagate = True)def main(): # current display global display,root display = Display() root = display.screen().root # we tell the X server we want to catch keyPress event root.change_attributes(event_mask = X.KeyPressMask|X.KeyReleaseMask) # just grab the "1"-key for now root.grab_key(10, 0, True,X.GrabModeSync, X.GrabModeSync) signal.signal(signal.SIGALRM, lambda a,b:sys.exit(1)) signal.alarm(10) while 1: event = display.next_event() print "event" handle_event(event) display.allow_events(X.AsyncKeyboard, X.CurrentTime)if __name__ == '__main__': main()欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)