尝试使用 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 上定义。
简单的代码,不起作用,还有什么需要我做的吗? 这只是一个测试,我只想知道 '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 上定义。