猿问

使用掩码键在键绑定问题上使用python-evdev将事件发送到uinput

简而言之,我试图在程序中添加一个键盘绑定,以编辑剪贴板,然后将所做的更改粘贴到活动窗口中。在Windows上,我认为我可以通过消息传递来做到这一点,但X并不那样使用消息传递,因此,为了做到这一点,我只是使用python-evdev向uinput发送ctrl + v事件。当您仅运行它时,它就可以很好地运行,但是我需要它在键绑定(在本例中为super + v)上运行。问题在于,当您将ctrl和v事件发送到uinput时,超级掩码仍处于活动状态,因此,它发送ctrl + super + v而不是将ctrl + v发送到窗口,而实际上并没有执行任何操作。这是最少的代码来确切解释我在说什么:


import evdev,time,keybinder,gtk


def callback():

    with evdev.UInput() as uinput:

        uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 1)

        uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 1)

        uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 0)

        uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 0)

        uinput.syn()


keybinder.bind("<super>v",callback)

keybinder.bind("Escape",gtk.main_quit)

gtk.main()

如果您足够快地发布超级,您实际上可以使它正常工作,但是它相当快,显然对于实际应用程序是不可接受的。我曾尝试发布super,但这会带来一些问题。它不是很通用,它提出了随后要做什么的问题(将其释放?再次按下?如果他们在您释放然后再次按下之间的时间内释放了该怎么办?),最重要的是,它没有确实似乎有效。


无论如何,我想问题是,有没有解决的办法?也许是一种发送按键事件的方法,该事件不会与物理键盘结合(不太可能)?如果没有,是否有更好的方法可以将其通用地粘贴到Linux?


一只萌萌小番薯
浏览 255回答 2
2回答
随时随地看视频慕课网APP

相关分类

Python
我要回答