You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11音量设置与获取Python脚本偶发COM错误的解决求助

Windows 11音量设置与获取Python脚本偶发COM错误的解决求助

我写了个Python脚本,用来逐步调整Windows系统的音量,逻辑是从0到99循环设置音量值,每设置一次等待2秒,然后打印当前的系统音量百分比。脚本代码如下:

from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL, CoInitialize, CoUninitialize
CLSCTX_ALL = 7

import time

def set_windows_volume(value_max_100):
    devices = AudioUtilities.GetSpeakers()
    interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
    volume = cast(interface, POINTER(IAudioEndpointVolume))
    scalarVolume = int(value_max_100) / 100
    volume.SetMasterVolumeLevelScalar(scalarVolume, None)
    
def get_windows_volume():
    devices = AudioUtilities.GetSpeakers()
    interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
    windows_volume = cast(interface, POINTER(IAudioEndpointVolume))
    volume_percentage = int(round(windows_volume.GetMasterVolumeLevelScalar() * 100))
    return volume_percentage

for i in range(0,100):
    set_windows_volume(i)
    time.sleep(2)
    print(get_windows_volume())

但运行过程中偶尔会抛出一堆COM相关的异常,核心错误日志如下(重复条目已简化):

Exception ignored in: <function _compointer_base.__del__ at 0x000002B538E96B90>
Traceback (most recent call last):
  File "C:\Python\lib\site-packages\comtypes\_post_coinit\unknwn.py", line 426, in __del__
    self.Release()
  File "C:\Python\lib\site-packages\comtypes\_post_coinit\unknwn.py", line 559, in Release
    return self.__com_Release()  # type: ignore
ValueError: COM method call without VTable

# (多条重复的上述错误日志省略)

======== Running on http://192.168.1.188:8080 ========
Exception ignored in: <function _compointer_base.__del__ at 0x000002B538E96B90>
Traceback (most recent call last):
  File "C:\Python\lib\site-packages\comtypes\_post_coinit\unknwn.py", line 426, in __del__
    self.Release()
  File "C:\Python\lib\site-packages\comtypes\_post_coinit\unknwn.py", line 559, in Release
    return self.__com_Release()  # type: ignore
ValueError: COM method call without VTable

我实际是在multiprocessing.Process环境中运行这段逻辑的,已经加上了CoInitialize和CoUninitialize处理COM初始化,也尝试了安全释放相关的COM指针资源,但这个错误还是会时不时冒出来。

有没有大佬能帮忙分析下问题根源,或者有没有其他更稳定的实现Windows系统音量控制的替代方案?

备注:内容来源于stack exchange,提问作者Chris P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:43:10