Search on blog:

PyAutoGui type native chars with delay [GB]

pyautogui doesn't sends ascii char to program - it sends to system key code normally used for this char and system uses this key code to send char to program. But if system uses non-standard layout for keyboard then it can send different char then we expect.

Normally

import time
import pyautogui

time.sleep(2) # time to change window

pyautogui.typewrite('!')

sends ! (using key code for key 1 which normally is used to type !) but for some layouts (ie. France layout) it can send § (because key 1 is used to type §)

It can't send also native chars because it doesn't have defined key codes for native chars.

This code will send nothing.

import time
import pyautogui

time.sleep(2) # time to change window

pyautogui.typewrite('ĄĘŚĆ!')

Probably only using clipboad you can send it correctly.

import time
import pyperclip
import pyautogui

time.sleep(2) # time to change window

pyperclip.copy('ĄĘŚĆ!')
pyautogui.hotkey('ctrl', 'v')

If you will use clipboard to copy single char and wait 0.1s between chars then you can get similar result to pyautogui.typewrite(..., interval=0.1).

import time
import pyperclip
import pyautogui

time.sleep(2) # time to change window

for char in 'ĄĘŚĆ!':
    pyperclip.copy(char)
    pyautogui.hotkey('ctrl', 'v', interval=0.1)

BTW: you can see all key codes using

import pyautogui

#print(pyautogui._pyautogui_win.keyboardMapping) # Window
print(pyautogui._pyautogui_x11.keyboardMapping) # Linux

You may even change values in keyboardMapping to send different key code

For example this

import pyautogui

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

pyautogui.typewrite('!!!')

can give ### instead of !!! because 12 is key code for 3/#

If you like it
Buy a Coffee