使用 Python 将字符串粘贴到 Gnome 中选定的文本字段中
Paste a string into selected text field in Gnome using Python
我需要编写一个 Python 脚本来将定义的字符串粘贴到当前执行的程序中的选定文本字段中(不要更改程序的源代码)。它应该像我按下键盘上的键一样。
我看过这个Python simulate keydown,最终这就是我想做的事情,但问题是我想输入的字符不在标准键盘布局中。
那么,有什么办法可以做到这一点吗?
您可能想看看 uinput。它允许您通过 /dev/uinput 设备注入击键、按钮、鼠标移动、操纵杆移动等。
在 Python 中,您将执行以下操作:
keys = [uinput.KEY_X, uinput.KEY_Y, uinput.KEY_Z]
device = uinput.Device(keys)
...
# Simulate key Y being pressed.
device.emit(uinput.KEY_Y, 1)
你当然需要获取uinput:
pip install python-uinput
如果您没有 uinput 设备,您可能需要安装它。
(嗯,这只是 Linux 的解决方案,我怀疑,不幸的是,我没有问你的平台是什么)。
所以,这是我的最终解决方案(基于之前的答案并使用 python-uinput)。它可以通过按 Ctrl+Shift+U 然后键入符号的十六进制代码来键入 Unicode 符号。
这是我为它编写的 Python 脚本:
导入uinput,时间
allKeys = [uinput.KEY_LEFTSHIFT, uinput.KEY_LEFTCTRL, uinput.KEY_SPACE, uinput.KEY_U,
uinput.KEY_A, uinput.KEY_B, uinput.KEY_C, uinput.KEY_D,
uinput.KEY_E, uinput.KEY_F, uinput.KEY_0, uinput.KEY_1,
uinput.KEY_2, uinput.KEY_3, uinput.KEY_4, uinput.KEY_5,
uinput.KEY_6, uinput.KEY_7, uinput.KEY_8, uinput.KEY_9]
device = uinput.Device(allKeys)
sleepInterval = 0.003
def printChar(charCode):
time.sleep(sleepInterval)
device.emit(uinput.KEY_LEFTSHIFT, 1);
device.emit(uinput.KEY_LEFTCTRL, 1);
device.emit_click(uinput.KEY_U);
device.emit(uinput.KEY_LEFTSHIFT, 0);
device.emit(uinput.KEY_LEFTCTRL, 0);
time.sleep(sleepInterval)
for symbol in charCode:
device.emit_click(uinput._chars_to_events(symbol)[0]);
time.sleep(sleepInterval)
device.emit_click(uinput.KEY_SPACE);
time.sleep(sleepInterval)
charString = "string that will be typed"
for char in charString:
printChar('{:04x}'.format(ord(char)))
我需要编写一个 Python 脚本来将定义的字符串粘贴到当前执行的程序中的选定文本字段中(不要更改程序的源代码)。它应该像我按下键盘上的键一样。
我看过这个Python simulate keydown,最终这就是我想做的事情,但问题是我想输入的字符不在标准键盘布局中。
那么,有什么办法可以做到这一点吗?
您可能想看看 uinput。它允许您通过 /dev/uinput 设备注入击键、按钮、鼠标移动、操纵杆移动等。
在 Python 中,您将执行以下操作:
keys = [uinput.KEY_X, uinput.KEY_Y, uinput.KEY_Z]
device = uinput.Device(keys)
...
# Simulate key Y being pressed.
device.emit(uinput.KEY_Y, 1)
你当然需要获取uinput:
pip install python-uinput
如果您没有 uinput 设备,您可能需要安装它。
(嗯,这只是 Linux 的解决方案,我怀疑,不幸的是,我没有问你的平台是什么)。
所以,这是我的最终解决方案(基于之前的答案并使用 python-uinput)。它可以通过按 Ctrl+Shift+U 然后键入符号的十六进制代码来键入 Unicode 符号。
这是我为它编写的 Python 脚本:
导入uinput,时间
allKeys = [uinput.KEY_LEFTSHIFT, uinput.KEY_LEFTCTRL, uinput.KEY_SPACE, uinput.KEY_U,
uinput.KEY_A, uinput.KEY_B, uinput.KEY_C, uinput.KEY_D,
uinput.KEY_E, uinput.KEY_F, uinput.KEY_0, uinput.KEY_1,
uinput.KEY_2, uinput.KEY_3, uinput.KEY_4, uinput.KEY_5,
uinput.KEY_6, uinput.KEY_7, uinput.KEY_8, uinput.KEY_9]
device = uinput.Device(allKeys)
sleepInterval = 0.003
def printChar(charCode):
time.sleep(sleepInterval)
device.emit(uinput.KEY_LEFTSHIFT, 1);
device.emit(uinput.KEY_LEFTCTRL, 1);
device.emit_click(uinput.KEY_U);
device.emit(uinput.KEY_LEFTSHIFT, 0);
device.emit(uinput.KEY_LEFTCTRL, 0);
time.sleep(sleepInterval)
for symbol in charCode:
device.emit_click(uinput._chars_to_events(symbol)[0]);
time.sleep(sleepInterval)
device.emit_click(uinput.KEY_SPACE);
time.sleep(sleepInterval)
charString = "string that will be typed"
for char in charString:
printChar('{:04x}'.format(ord(char)))