3

我正在尝试编写一个 python 脚本,该脚本通过单击按钮自动运行外部程序并使用 pyautogui 提供键盘输入(通常是文件路径)。现在,如果我尝试使用功能 pyautogui.typewriter(filepath) 它总是将反斜杠键入为问号。这个最小的例子:

pyautogui.typewrite('\\')

简单地返回?

现在,如果我将系统设置中的键盘布局更改为英文,它会正确返回 \

我的默认布局是德语,我无法真正改变它,因为错误的日期格式会弄乱程序的后期阶段。任何想法如何解决这个问题?

4

5 回答 5

2

好的,我终于有了一个解决方法,基于这个讨论: https ://github.com/asweigart/pyautogui/issues/46

我在 _pyautogui_win.py 中进行了修改。并更改了“\”的键盘输入。我用这个方便的工具在我的键盘上获得了虚拟键码:http: //www.delphiforfun.org/Programs/Utilities/KeyCodes.htm#Download 并将它们转换为十六进制代码。然后我更改了 _keyDown 函数并添加了以下内容:

if key == '\\': 
        ctypes.windll.user32.keybd_event(0x11, 0, 0, 0) # should be left control
        ctypes.windll.user32.keybd_event(0x12, 0, 0, 0) # should be alt
        ctypes.windll.user32.keybd_event(0xDB, 0, 0, 0) # should be alt ß
        ctypes.windll.user32.keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0x12, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0xDB, 0, KEYEVENTF_KEYUP, 0)
        return

现在一切正常。我认为这个解决方案可以应用于任何非英语键盘布局。

于 2016-03-17T09:10:18.683 回答
2

这本身不是编码问题。它与 pyautogui 如何发送键盘输入有关。它正在发送一个击键,至少在这种情况下,不考虑键盘布局(实际pyautogui使用的方法是特定于平台的。)

没有内置pyautogui用于指定键盘区域设置的直接解决方案。所以,我看到了几个不同的选择......

pyautogui(1) 您可以创建一个函数来根据需要更改键盘布局(具体操作方式取决于平台),您甚至可以使用命令来执行此操作。

(2) 不提供\\反斜杠的输入,而是提供将\在德语键盘上产生的输入。如有必要,您可以定义一个函数,该函数将接受一个字符串参数,将该字符串中的问题字符转换为等效pyautogui命令,从而在德语键盘上产生所需的输出。通过查看德语键盘的图片,它实际上看起来像\并且?在同一个键上,因此您可能只需要添加一个修饰符,例如shift(编辑:这是一个使用法语键盘和 pyautogui执行此操作的示例

(3) 如果可能,考虑通过键盘输入以外的其他方法调用文件,例如os.systemsubprocess.call

于 2016-03-16T16:16:30.093 回答
0

问题(我认为)是您也用 \' 逃脱了报价

老实说,我不知道您需要多少个反斜杠(我从未使用过 pyautogui,但我认为这是 Python 的问题,而不是包的问题),所以试试 '\\' 和 '\\' 和 '\ \\'。除此之外,我认为您应该尝试寻找另一种解决方案。

于 2016-03-16T15:48:56.180 回答
0

它看起来很难,但实际上很简单,您只需创建一个变量并在其中键入 '\\' 然后在 pyautogui 中编写变量,如下所示:

x = "\\"
pyautogui.write(x)

我想你的问题现在已经解决了。

于 2022-01-11T18:57:32.683 回答
0

我有同样的问题,但我在 Linux 上工作。对我来说,解决方案就是使用除法。

当我输入“cd /home/pi”时,“/”从未出现,解决方案是:

if key == '/':
    pyautogui.press('divide')

这个对我有用!

于 2019-09-08T18:40:49.783 回答