如何在 python 脚本中控制 windows 主音频

How to control windows master audio in python script

取消 abarnert 在 Python: Change Windows 7 master volume

中的建议

我正在尝试编写 python 脚本来控制 windows 7

中的主音量

我知道在 C++ 中可以这样做:

const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
mmde = CoCreateInstance(
    CLSID_MMDeviceEnumerator, NULL,
    CLSCTX_ALL, IID_IMMDeviceEnumerator,
    (void**)&pEnumerator);
mmd = mmde.GetDefaultAudioEndpoint(eRender, eMultimedia);
mgr = mmd.Activate(IID_IAudioSessionManager);
sav = mgr.GetSimpleAudioVolume(None, True);
sav.SetMasterVolume(0.5);

我正在尝试使用 pywin32 在 python 中获得该功能,但我发现自己卡住了。到目前为止我的代码是:

import pythoncom

CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator)
IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator)
mmde = pythoncom.CoCreateInstance(CLSID_MMDeviceEnumerator, None, CLSCTX_ALL, IID_IMMDeviceEnumerator)
mmd = mmde.GetDefaultAudioEndpoint(eRender, eMultimedia)
mgr = mmd.Activate(IID_IAudioSessionManager)
sav = mgr.GetSimpleAudioVolume(None, True)
sav.SetMasterVolume(0.5)

CoCreateInstance 需要 MMDeviceEnumerator 的 class ID (CLSID),但似乎没有像 __uuidof() 这样的任何函数可用于获取 class ID。 (反正我找不到。)

有没有人有什么想法/建议?我是 COM/OLE 编程和 pywin32 的新手,感觉有点迷茫。

来自文档

PyIUnknown = CoCreateInstance(clsid, unkOuter , context , iid )

在哪里 clid : PyIID Class 对象的标识符 (CLSID)

只要使用 COM GUID,就会使用 PyIID 对象。 PyIID 对象可以使用 pywintypes.IID() 函数创建,尽管所有接受 GUID 的函数也接受标准 GUID 格式的字符串。

PyIID = IID(iidString, is_bytes )

其中 iidString 是 IID 或 ProgID 的字符串表示形式。

MMDeviceEnumerator CLSID 为 BCDE0395-E52F-467C-8E3D-C4579291692E

所以试试这个

PyIID = IID("BCDE0395-E52F-467C-8E3D-C4579291692E", is_bytes )