【发布时间】:2018-03-11 20:13:40
【问题描述】:
为 Windows SDK 文档中命名的给定 COM 类(例如 IChannelAudioVolume)查找 GUID(例如 {1C158861-B533-4B30-B1CF-E853E51C59B8})的正确方法是什么?
我正在编写一个 Python 脚本,该脚本为正在播放音频的单个应用程序 (audio sessions) 设置 Windows 音频混音器设置。我想设置通道音量,以平移音频,这是IChannelAudioVolume API 公开的内置 Windows 功能。
我看到pycaw 通过comtypes 使用许多基于COM 的Windows API,从向comtypes 提供GUID、父接口和方法详细信息的声明开始:
from ctypes import HRESULT, POINTER, c_uint32, c_float
from comtypes import IUnknown, GUID, COMMETHOD
class ISimpleAudioVolume(IUnknown):
_iid_ = GUID('{87CE5498-68D6-44E5-9215-6DA47EF883D8}')
_methods_ = (
# HRESULT SetMasterVolume(
# [in] float fLevel,
# [in] LPCGUID EventContext);
COMMETHOD([], HRESULT, 'SetMasterVolume',
(['in'], c_float, 'fLevel'),
(['in'], POINTER(GUID), 'EventContext')), # ...
编写此类代码的人在哪里可以找到这些与特定接口名称相对应的 GUID(例如 '{87CE5498-68D6-44E5-9215-6DA47EF883D8}')?它们不在各个接口的主要文档中。他们在某处正式记录了吗?或者,我可以运行一些东西从 Windows 中的接口名称(例如ISimpleAudioVolume)中查找它们吗?
与此同时,我只是在谷歌上搜索我正在寻找的接口的名称,以及没有{} 的主题相似接口的 GUID 值,并希望遇到其他具有它们的代码示例。这对于我的直接目的来说已经足够好用了,但是会被击中或错过,并且不清楚我以这种方式找到的 GUID 是否旨在用作公共 API。
【问题讨论】:
标签: python windows com comtypes