Как управлять Windows Master Audio в сценарии Python

уходя от предложения Абарнерта в 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);

Я пытаюсь получить эту функциональность в Python с помощью pywin32, но я застрял Код, который у меня пока есть:

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 хочет идентификатор класса (CLSID) MMDeviceEnumerator, но, похоже, не имеет никакой функции, такой как __uuidof (), чтобы использовать для получения идентификатора класса. (Не то чтобы я все равно смог найти.)

У кого-нибудь есть идеи / предложения? Я новичок в программировании COM / OLE и pywin32 и чувствую себя немного потерянным.

1

Решение

Из документации

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

где
clsid: PyIID
Идентификатор класса (CLSID) объекта

Объект PyIID используется всякий раз, когда используется COM GUID. Объекты PyIID могут быть созданы с использованием функции pywintypes.IID (), хотя все функции, которые принимают GUID, также принимают строку в стандартном формате GUID.

PyIID = IID(iidString, is_bytes )

где iidString — строковое представление IID или ProgID.

CLSID MMDeviceEnumerator является BCDE0395-E52F-467C-8E3D-C4579291692E

так попробуй это

PyIID = IID("BCDE0395-E52F-467C-8E3D-C4579291692E", is_bytes )
1

Другие решения


По вопросам рекламы [email protected]