找到Windows SDK文档中指定的给定COM类(例如{1C158861-B533-4B30-B1CF-E853E51C59B8}
)的GUID(例如IChannelAudioVolume
)的正确方法是什么?
我正在开发一个Python脚本,为正在播放音频的各个应用程序设置Windows音频混音器设置(audio sessions)。我想设置通道音量,以平移音频,这是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。
答案 0 :(得分:1)
Windows SDK包含接口定义(IDL)文件以及Include目录中的C / C ++头文件,这些文件包含GUID。
接口的MSDN API文档for instance IChannelAudioVolume
在页面底部附近的 Requirements 框中提供C / C ++头文件名。对于IChannelAudioVolume
,它是Audioclient.h
。在SDK目录中搜索该文件名,以查找找到该头文件的子目录,在本例中为
C:\Program Files (x86)\Windows Kits\8.0\Include\um
在那里你会找到一个关联的IDL文件Audioclient.idl
。
每个接口都有一个部分,您可以在其中找到GUID,例如:
//-----------------------------------------------------------------------------
// Description: IChannelAudioVolume interface
//
[
object,
uuid(1C158861-B533-4B30-B1CF-E853E51C59B8),
// ...
答案 1 :(得分:1)
此在线工具MagnumDb为“ Magic Number Database”(免责声明:我写过),是一个完全免费的seach引擎,其中包含99%的Windows SDK常数以及70K guid(IID,CLSID等)。 )。
您可以使用通配符等按名称或值查询它,例如:http://www.magnumdb.com/search?q=IChannelAudioVolume
将为您提供此信息(名称,类型,值,SDK头文件位置):
IID_IChannelAudioVolume Guid 1c158861-b533-4b30-b1cf-e853e51c59b8 %ProgramFiles(x86)%\Windows Kits\10\Include\10.0.17134.0\um\Audioclient.h(1942,0)