1

Pythonの abarnert による提案から外れる: Windows 7 のマスター ボリュームを変更する

Windows 7 でマスター ボリュームを制御する Python スクリプトを作成しようとしています。

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 のクラス ID (CLSID) を必要としますが、クラス ID を取得するために使用する __uuidof() のような関数はないようです。(とにかく見つけたわけではありません。)

アイデアや提案はありますか?私は COM/OLE プログラミングと pywin32 の両方に不慣れで、少し戸惑っています。

4

1 に答える 1

1

ドキュメントから

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

clsid : オブジェクトの PyIID クラス識別子 (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 )
于 2015-09-08T06:41:45.917 に答える