如何从Windows API文档中使用的接口名称获取COM类的GUID?

时间:2017-09-29 21:17:51

标签: python windows com comtypes

找到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。

2 个答案:

答案 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)