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)
除了:
- 它写
(带FR键盘布局)hello world§
- 它写
(带EN键盘布局)hello world
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 number12
是键3
的键码(scancode),这是唯一一个显示如何更改它的示例,但它不是获得的正确值代码>。它至少在QWERTY(美国键盘)上提供了.
。在我的QWERTY(美国键盘)上,原始数字10
给出了正确的代码>没有任何更改,因此我无法使用其他布局对其进行测试。我写了一篇文章,也许它能帮助你为不同的产品找到正确的价值