Она не отправляет программы 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('!!!')
дает мне ###
вместо !!!