如何在 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 )
取消 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 )