使用 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)))