1

放弃 abarnert 在Python 中的建议:更改 Windows 7 主卷

我正在尝试编写一个 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 的类 ID (CLSID),但似乎没有像 __uuidof() 这样的函数来获取类 ID。(反正我也找不到。)

有没有人有任何想法/建议?我是 COM/OLE 编程和 pywin32 的新手,感觉有点失落。

4

1 回答 1

1

从文档

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

其中 clsid :对象的 PyIID 类标识符 (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 )
于 2015-09-08T06:41:45.917 回答