尝试使用 pyautogui.press('volumemute') 使系统静音,但它什么也没做

Trying to mute the system using pyautogui.press('volumemute') but it's not doing anything

简单的代码,不起作用,还有什么需要我做的吗? 这只是一个测试,我只想知道 'volumemute' 是否有效,其他特殊键如 'capslock' 和 'volumeup' 也不起作用。 'volumemute' 在做什么?它是否使系统静音?希望看到 mac 的小音量 window,但它也不会静音,比如 firefox 上的 youtube 视频...

import pyautogui
import time

confirm_window = pyautogui.alert()
if confirm_window == 'OK':
    time.sleep(1)
    pyautogui.press('volumemute')       # Does not work
    pyautogui.press('a')                # Does work
    pyautogui.press('b')                # Does work

我已经尝试过这个link的解决方案,如果我在新文件上复制 Phylliida 的解决方案或 kenorb 的解决方案并调用相同示例的 KeyPress(),会发生相同的结果。

我还在 pyautogui 的 github 页面上看到 mojave 存在权限问题,尽管它不应该影响我,但我添加了 PyCharm、Python 启动器和终端辅助功能列表, image, 当我按下执行其他操作的按钮时,我希望能够降低脚本中的音量,比如将光标移动到特定坐标等。 此外,2011 年初的 Macbook,high sierra 是我可以升级 de OS

非常感谢

嗯,这花了点时间才弄清楚。 :-)

查找错误:

事实证明,pyautogui 的众多问题之一是 2015 年抱怨 press is not working for all keys in macOS, which already has a partial (!!) solution proposed in pull #213 的这个问题。在这种特定情况下,原始代码使用两个连续的 if … 语句而不是 if … elif …,这使得代码中断。

如果您检查 GitHub 上的代码,您会发现 .press() 方法是 defined in init.py to refer to the platform-dependent _keyup() and _keydown() function calls defined here for macOS. If you manually apply the fix from pull #213,您仍然需要修复另一件事,但是:

Pyautogui 使用(在 _keyup()_keydown() 中)行:

if key in special_key_translate_table:

但是在执行这一行之前,"key" 已经被转换为小写,因为 this line in init.py:

if len(key) > 1:
    key = key.lower()

special_key_translate_table defined here 的字典需要像“KEYTYPE_MUTE”这样的大写键,因此查找将不起作用!

修复代码:

首先,找出 pyautogui 代码在您的安装中的位置(即找出 site-packages 的安装位置)。最简单的方法是 运行 此代码:

from pyautogui import press
press()

应该抛出这样的错误消息:

Traceback (most recent call last):
  File "pyautogui_test_2.py", line 6, in <module>
    press()
  File "/path/to/the/python/site-packages/pyautogui/__init__.py", line 586, in wrapper
    returnVal = wrappedFunction(*args, **kwargs)
TypeError: press() missing 1 required positional argument: 'keys'

请注意,Traceback 中的路径取决于您的安装,现在打开 site-packages 中的 pyautogui 文件夹(即“/path/to/the/python/site-packages/pyautogui/”)并在其中编辑文件“ _pyautogui_osx.py" 靠近第 219 行:

def _keyDown(key):
    if key.upper() in special_key_translate_table:
        _specialKeyEvent(key.upper(), 'down')
    elif key not in keyboardMapping or keyboardMapping[key] is None:
        return    
    else:
        _normalKeyEvent(key, 'down')

def _keyUp(key):
    if key.upper() in special_key_translate_table:
        _specialKeyEvent(key.upper(), 'up')
    elif key not in keyboardMapping or keyboardMapping[key] is None:
        return
    else:
        _normalKeyEvent(key, 'up')

其中包含来自上述 pull #213 的修复,以及使用 key.upper() 的更正查找函数。现在你应该能够使用前面提到的 special_key_translate_table 字典中的所有键,例如通过在脚本中调用 press(u'KEYTYPE_MUTE') 将系统音量静音。

请注意,所有特殊键码也在 Apple's opensource documentation for the Human Interface system 上定义。