Напишите! персонаж с pyautogui - PullRequest
1 голос
/ 06 января 2020

Это работает для имитации нажатий клавиш:

import pyautogui
pyautogui.typewrite('hello world!', interval=0.1)

за исключением того, что:

  • пишет hello world§ (с раскладкой клавиатуры FR)
  • пишет hello world (с раскладкой клавиатуры EN)

Конечно, желаемый вывод должен быть hello world!.

Есть ли обходной путь?

Примечание: I не думайте, что это та же проблема, что и Ввод строки Unicode с pyauto gui, потому что здесь это не не-ASCII символ, но в любом случае основной ответ с хаком копирования / вставки не будет работать в моем случай, поскольку я действительно хочу медленную печать с паузой 100 мс между каждым нажатием клавиши.

Вот как воспроизвести ошибку:

  • Windows 7 x64
  • Python 3,6 или Python 2,7
  • pyauto gui 0,9,41 или 0,9,48
  • две строки кода, упомянутые в начале

Ответы [ 2 ]

1 голос
/ 07 января 2020

Она не отправляет программы asci char ! - она ​​отправляет код системной клавиатуры, вероятно, для клавиши 1, которая в стандартной раскладке также используется для !, и система решает, какой символ отправить программе. Если ваша система имеет нестандартную компоновку, то система может отправить неверный символ.

Вероятно, только используя clipboad, вы можете отправить его правильно. Если вы будете использовать буфер обмена для копирования одного символа и подождать 0.1s между символами, вы можете получить аналогичный результат.

import time
import pyperclip
import pyautogui

time.sleep(2)

for char in 'Hello World!':
    pyperclip.copy(char)
    pyautogui.hotkey('ctrl', 'v', interval=0.1)

Кстати: с помощью print(pyautogui.__file__) вы можете найти Папка с исходным кодом и в файле _pyautogui_win.py вы можете увидеть, какие коды клавиш он использует в Windows.

Вы должны увидеть коды клавиш, назначенные символам, используя также

Окно:

print(pyautogui._pyautogui_win.keyboardMapping)

Linux:

print(pyautogui._pyautogui_x11.keyboardMapping)

Возможно, если вы измените значения в keyboardMapping, тогда он отправит его правильно, но для каждого макета вам придется устанавливать разные значения.

Например на Linux это

import pyautogui

#pyautogui._pyautogui_win.keyboardMapping['!'] = 12
pyautogui._pyautogui_x11.keyboardMapping['!'] = 12

pyautogui.typewrite('!!!')

дает мне ### вместо !!!

0 голосов
/ 07 января 2020

Кажется, это известная проблема:

https://github.com/asweigart/pyautogui/issues/38

Пользователь на Windows 7, Python 3.4, работает PyAuto GUI 0.9.30 и французская клавиатура "AZERTY" сообщили, что не могут имитировать нажатие:
Запустив модульные тесты, они получили следующие результаты:
[...]
a
ba
. Привет, мир§

https://github.com/asweigart/pyautogui/pull/55

https://github.com/asweigart/pyautogui/issues/137

...