【发布时间】:2013-06-05 22:46:37
【问题描述】:
简而言之,我正在尝试向我的程序添加一个键绑定,它将编辑剪贴板,然后将更改粘贴到您处于活动状态的任何窗口中。在 Windows 上,我想我可能可以通过消息传递来做到这一点,但 X 不会像那样使用消息传递,所以为了做到这一点,我只是使用 python-evdev 将 ctrl+v 事件发送到 uinput。当您只运行它时,它运行得相当好,但我需要它在键绑定上运行,在这种情况下是 super+v。问题就变成了,当你将 ctrl 和 v 事件发送到 uinput 时,超级掩码仍然处于活动状态,因此它没有将 ctrl+v 发送到窗口,而是发送 ctrl+super+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 上通用粘贴?
【问题讨论】: