Python 打字!具有pyautogui的字符

Python 打字!具有pyautogui的字符,python,pyautogui,Python,Pyautogui,这可用于模拟击键: import pyautogui pyautogui.typewrite('hello world!', interval=0.1) 除了: 它写hello world§(带FR键盘布局) 它写hello world(带EN键盘布局) 当然,所需的输出应该是helloworld 有解决办法吗 注:我不认为这是同一个问题,因为这里它不是一个非ASCII字符,但无论如何,在我的情况下,使用复制/粘贴黑客的主要答案将不起作用,因为我真的希望在每个按键之间有100毫秒的停顿,以

这可用于模拟击键:

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

  • 它写
    hello world§
    (带FR键盘布局)
  • 它写
    hello world
    (带EN键盘布局)
当然,所需的输出应该是
helloworld

有解决办法吗

注:我不认为这是同一个问题,因为这里它不是一个非ASCII字符,但无论如何,在我的情况下,使用复制/粘贴黑客的主要答案将不起作用,因为我真的希望在每个按键之间有100毫秒的停顿,以慢输入

以下是如何重现错误:

  • Windows 7 x64
  • Python 3.6或Python 2.7
  • pyautogui 0.9.41或0.9.48
  • 开头提到的两行代码

它不发送ascii字符
到程序-它将键盘代码发送到系统(可能是标准布局中用于字符
的键
1
的代码),系统决定字符发送到程序的内容。如果您的系统具有非标准布局,则系统可能会发送错误的字符

可能只有使用剪贴簿才能正确发送。如果使用剪贴板复制单个字符并在字符之间等待
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.\uuuu file\uuuu)
可以找到包含源代码的文件夹,并在文件
\u pyautogui\u win.py
中查看它在
窗口中使用的关键代码

您应该还可以使用查看分配给字符的键代码

窗口:

print(pyautogui._pyautogui_win.keyboardMapping)
Linux:

print(pyautogui._pyautogui_x11.keyboardMapping)
如果您更改
键盘映射中的值,它可能会正确发送,但对于每个布局,您必须设置不同的值

例如,在Linux上

import pyautogui

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

pyautogui.typewrite('!!!')

给我
###
而不是

这似乎是一个已知的问题:

Windows 7、Python 3.4上运行PyAutoGUI 0.9.30和法国“AZERTY”键盘的用户报告无法模拟按下:
通过运行单元测试,他们得到了以下结果:
[…]
a
ba
.你好,世界§


显示了打印“Hello world”的示例,其中包含一个
。看起来你不需要做什么特别的事。你能提供更多关于你的环境的信息吗?@Chris我有一个标准的windows7x64,python3.6,pyautogui0.9.41;我测试了法语键盘布局和英语。我用一段视频更新了这个问题。我没有其他程序运行(没有自动热键或类似的运行在同一时间)。这是为我工作。它打印
如预期。你在windows上吗?您是否尝试删除解释点并再次手动输入?@Jortega,是的,我尝试过。我在Windows上,你呢?我刚刚升级到pyautogui 0.9.48,它是一样的:/我也尝试过Py2.7,它是一样的:我刚刚在另一台(非常标准的)Windows 7 x64计算机上尝试过+Python3.6+pyautogui 0.9.48,它是一样的。Hi@furas。您是如何猜测值
12
会解决此问题的?我试图在我的QWERTY(美国键盘)上显示这个字符
~
@Daishi number
12
是键
3
的键码(scancode),这是唯一一个显示如何更改它的示例,但它不是获得
的正确值。它至少在QWERTY(美国键盘)上提供了
.
。在我的QWERTY(美国键盘)上,原始数字
10
给出了正确的
没有任何更改,因此我无法使用其他布局对其进行测试。我写了一篇文章,也许它能帮助你为不同的产品找到正确的价值