在Windows 7上以编程方式更改系统范围的扬声器平衡

发布于 2021-01-29 16:49:00

如何在Windows 7上以编程方式更改系统范围的扬声器平衡?

(我只能使用Python和AHK进行编程。)

关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    快捷方式(由@AndreMiras创建)->使用Pycaw,有关Pycaw的用法可在此处找到

    详细方法->首先安装python软件包Comtypes

    1. 使用 pip install comtypes

    要么

    1. https://pypi.python.org/pypi/comtypes下载,然后解压缩下载文件夹。在解压缩的文件夹中找到setup.py。打开cmd转到 setup.py 的路径,然后运行命令 python setup.py install

    现在只需运行code.py文件,您就可以通过更改函数 SetMasterVolumeLevel( -25
    ,None)
    的第一个参数来调整音量,第一个参数必须在-65到0之间。我希望在Windows 8中尝试过此代码将在Windows 7上运行。

    请参阅最后 行代码以找到 音量。SetMasterVolumeLevel(-25,None) 并调整PC的音量

    代码

    from comtypes import *
    import comtypes.client
    from ctypes import POINTER
    from ctypes.wintypes import DWORD, BOOL
    
    MMDeviceApiLib = \
        GUID('{2FDAAFA3-7523-4F66-9957-9D5E7FE698F6}')
    IID_IMMDevice = \
        GUID('{D666063F-1587-4E43-81F1-B948E807363F}')
    IID_IMMDeviceEnumerator = \
        GUID('{A95664D2-9614-4F35-A746-DE8DB63617E6}')
    CLSID_MMDeviceEnumerator = \
        GUID('{BCDE0395-E52F-467C-8E3D-C4579291692E}')
    IID_IMMDeviceCollection = \
        GUID('{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}')
    IID_IAudioEndpointVolume = \
        GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}')
    
    class IMMDeviceCollection(IUnknown):
        _iid_ = GUID('{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}')
        pass
    
    class IAudioEndpointVolume(IUnknown):
        _iid_ = GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}')
        _methods_ = [
            STDMETHOD(HRESULT, 'RegisterControlChangeNotify', []),
            STDMETHOD(HRESULT, 'UnregisterControlChangeNotify', []),
            STDMETHOD(HRESULT, 'GetChannelCount', []),
            COMMETHOD([], HRESULT, 'SetMasterVolumeLevel',
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'SetMasterVolumeLevelScalar',
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetMasterVolumeLevel',
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'GetMasterVolumeLevelScalar',
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'SetChannelVolumeLevel',
                (['in'], DWORD, 'nChannel'),
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'SetChannelVolumeLevelScalar',
                (['in'], DWORD, 'nChannel'),
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetChannelVolumeLevel',
                (['in'], DWORD, 'nChannel'),
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'GetChannelVolumeLevelScalar',
                (['in'], DWORD, 'nChannel'),
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'SetMute',
                (['in'], BOOL, 'bMute'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetMute',
                (['out','retval'], POINTER(BOOL), 'pbMute')
            ),
            COMMETHOD([], HRESULT, 'GetVolumeStepInfo',
                (['out','retval'], POINTER(c_float), 'pnStep'),
                (['out','retval'], POINTER(c_float), 'pnStepCount'),
            ),
            COMMETHOD([], HRESULT, 'VolumeStepUp',
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'VolumeStepDown',
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'QueryHardwareSupport',
                (['out','retval'], POINTER(DWORD), 'pdwHardwareSupportMask')
            ),
            COMMETHOD([], HRESULT, 'GetVolumeRange',
                (['out','retval'], POINTER(c_float), 'pfMin'),
                (['out','retval'], POINTER(c_float), 'pfMax'),
                (['out','retval'], POINTER(c_float), 'pfIncr')
            ),
    
        ]
    
    class IMMDevice(IUnknown):
        _iid_ = GUID('{D666063F-1587-4E43-81F1-B948E807363F}')
        _methods_ = [
            COMMETHOD([], HRESULT, 'Activate',
                (['in'], POINTER(GUID), 'iid'),
                (['in'], DWORD, 'dwClsCtx'),
                (['in'], POINTER(DWORD), 'pActivationParans'),
                (['out','retval'], POINTER(POINTER(IAudioEndpointVolume)), 'ppInterface')
            ),
            STDMETHOD(HRESULT, 'OpenPropertyStore', []),
            STDMETHOD(HRESULT, 'GetId', []),
            STDMETHOD(HRESULT, 'GetState', [])
        ]
        pass
    
    class IMMDeviceEnumerator(comtypes.IUnknown):
        _iid_ = GUID('{A95664D2-9614-4F35-A746-DE8DB63617E6}')
    
        _methods_ = [
            COMMETHOD([], HRESULT, 'EnumAudioEndpoints',
                (['in'], DWORD, 'dataFlow'),
                (['in'], DWORD, 'dwStateMask'),
                (['out','retval'], POINTER(POINTER(IMMDeviceCollection)), 'ppDevices')
            ),
            COMMETHOD([], HRESULT, 'GetDefaultAudioEndpoint',
                (['in'], DWORD, 'dataFlow'),
                (['in'], DWORD, 'role'),
                (['out','retval'], POINTER(POINTER(IMMDevice)), 'ppDevices')
            )
        ]
    
    
    
    
    
    enumerator = comtypes.CoCreateInstance( 
        CLSID_MMDeviceEnumerator,
        IMMDeviceEnumerator,
        comtypes.CLSCTX_INPROC_SERVER
    )
    
    print enumerator
    endpoint = enumerator.GetDefaultAudioEndpoint( 0, 1 )
    print endpoint
    volume = endpoint.Activate( IID_IAudioEndpointVolume, comtypes.CLSCTX_INPROC_SERVER, None )
    print volume
    print volume.GetMasterVolumeLevel()
    print volume.GetVolumeRange()
    #volume.SetMasterVolumeLevel(-65, None) uncomment for 0 volume
    #volume.SetMasterVolumeLevel(-1, None) uncomment for full volume
    volume.SetMasterVolumeLevel(-25, None) #Change the first argument for controlling the volume remember it should be -ve not less than -65
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看