精确控制windows全局音量二(Python)
时间:2020-04-20
本文章向大家介绍精确控制windows全局音量二(Python),主要包括精确控制windows全局音量二(Python)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接上一篇:精确控制windows全局音量
频繁调用会导致comtypes模块报异常。
while True:
print(get())
会导致
ValueError: Procedure probably called with not enough arguments (4 bytes missing)
特更换如下:
from comtypes import * class IAudioEndpointVolume(IUnknown): _iid_ = GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}') _methods_ = [ COMMETHOD([], HRESULT, 'RegisterControlChangeNotify', (['in'], c_voidp, 'pNotify') ), COMMETHOD([], HRESULT, 'UnregisterControlChangeNotify', (['in'], c_voidp, 'pNotify') ), COMMETHOD([], HRESULT, 'GetChannelCount', (['out'], POINTER(c_uint), 'pnChannelCount') ), COMMETHOD([], HRESULT, 'SetMasterVolumeLevel', (['in'], c_float, 'fLevelDB'), (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'SetMasterVolumeLevelScalar', (['in'], c_float, 'fLevel'), (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'GetMasterVolumeLevel', (['out'], POINTER(c_float), 'pfLevelDB') ), COMMETHOD([], HRESULT, 'GetMasterVolumeLevelScalar', (['out'], POINTER(c_float), 'pfLevel') ), COMMETHOD([], HRESULT, 'SetChannelVolumeLevel', (['in'], c_uint, 'nChannel'), (['in'], c_float, 'fLevelDB'), (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'SetChannelVolumeLevelScalar', (['in'], c_uint, 'nChannel'), (['in'], c_float, 'fLevel'), (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'GetChannelVolumeLevel', (['in'], c_uint, 'nChannel'), (['out'], POINTER(c_float), 'pfLevelDB') ), COMMETHOD([], HRESULT, 'GetChannelVolumeLevelScalar', (['in'], c_uint, 'nChannel'), (['out'], POINTER(c_float), 'pfLevel') ), COMMETHOD([], HRESULT, 'SetMute', (['in'], c_int, 'bMute'), (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'GetMute', (['out'], POINTER(c_bool), 'pbMute') ), COMMETHOD([], HRESULT, 'GetVolumeStepInfo', (['out'], POINTER(c_uint), 'pnStep'), (['out'], POINTER(c_uint), 'pnStepCount') ), COMMETHOD([], HRESULT, 'VolumeStepUp', (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'VolumeStepDown', (['in'], c_voidp, 'pguidEventContext') ), COMMETHOD([], HRESULT, 'QueryHardwareSupport', (['out'], POINTER(c_uint), 'pdwHardwareSupportMask') ), COMMETHOD([], HRESULT, 'GetVolumeRange', (['out'], POINTER(c_float), 'pflVolumeMindB'), (['out'], POINTER(c_float), 'pflVolumeMaxdB'), (['out'], POINTER(c_float), 'pflVolumeIncrementdB') ) ] class IMMDevice(IUnknown): _iid_ = GUID('{D666063F-1587-4E43-81F1-B948E807363F}') _methods_ = [ COMMETHOD([], HRESULT, 'Activate', (['in'], POINTER(GUID), 'iid'), (['in'], c_uint, 'dwClsCtx'), (['in'], c_voidp, 'pActivationParams'), (['out'], POINTER(POINTER(IAudioEndpointVolume)), 'ppInterface') ), COMMETHOD([], HRESULT, 'OpenPropertyStore', (['in'], c_int32, 'stgmAccess'), (['out'], c_voidp, 'ppProperties') ), COMMETHOD([], HRESULT, 'GetId', (['out'], c_voidp, 'ppstrId') ), COMMETHOD([], HRESULT, 'GetState', (['out'], POINTER(c_uint), 'pdwState') ) ] class IMMDeviceEnumerator(IUnknown): _iid_ = GUID('{A95664D2-9614-4F35-A746-DE8DB63617E6}') _methods_ = [ COMMETHOD([], HRESULT, 'EnumAudioEndpoints', (['in'], c_int, 'dataFlow'), (['in'], c_int, 'dwStateMask'), (['out'], POINTER(c_voidp), 'ppDevices') ), COMMETHOD([], HRESULT, 'GetDefaultAudioEndpoint', (['in'], c_int, 'dataFlow'), (['in'], c_int, 'role'), (['out'], POINTER(POINTER(IMMDevice))) ), COMMETHOD([], HRESULT, 'GetDevice', (['in'], c_voidp, 'pwstrId'), (['out'], POINTER(POINTER(IMMDevice))) ), COMMETHOD([], HRESULT, 'RegisterEndpointNotificationCallback', (['in'], c_voidp) ), COMMETHOD([], HRESULT, 'UnregisterEndpointNotificationCallback', (['in'], c_voidp) ) ] class VolCtrl(object): def __init__(self): clsid = GUID('{BCDE0395-E52F-467C-8E3D-C4579291692E}') pMde = CoCreateInstance(clsid, interface=IMMDeviceEnumerator) EDataFlow_eRender = 0 ERole_eConsole = 0 pDevice = pMde.GetDefaultAudioEndpoint(EDataFlow_eRender, ERole_eConsole) CLSCTX_ALL = 0x17 iid = GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}') pEndPoint = pDevice.Activate(byref(iid), CLSCTX_ALL, None) self.__pEndPoint = pEndPoint def mastervol_up(self): self.__pEndPoint.VolumeStepUp(None) def mastervol_down(self): self.__pEndPoint.VolumeStepDown(None) @property def mastervol(self): return self.__pEndPoint.GetMasterVolumeLevelScalar() @mastervol.setter def mastervol(self, vol): print vol self.__pEndPoint.SetMasterVolumeLevelScalar(vol, None) class vol_helper: def __init__(self): self.vc = VolCtrl() def get_vol(self): # print('获取音量') # ev = IAudioEndpointVolume.get_default() return round(self.vc.mastervol, 2) def set_vol(self,vol): # print('设置音量') if vol >= 0 and vol <=1: # ev = IAudioEndpointVolume.get_default() # ev.SetMasterVolumeLevelScalar(vol) self.vc.mastervol = vol
目前尚未出现ValueError的问题。
ValueError:根据搜索结果推测是python调用dll,某个指针没处理好。
告辞!
原文地址:https://www.cnblogs.com/wohuiyijiu/p/12736557.html
- Angularjs基础(十)
- Mac 中JetBrain 系列IDE 的配置文件同步(通过Dropbox)
- 面向服务架构(SOA)和企业服务总线(ESB)
- UPS宣布加入货运区块链联盟 价值万亿的物流行业未来将无纸化?
- Android中动态更新ListView
- 关于机器学习,这可能是目前最全面最无痛的入门路径和资源!
- 并行计算Brahma :LINQ-to-GPU
- 实例演示Android异步加载图片
- Eclipse快捷键大全
- Entity Framework 和NHibernate的区别
- Angularjs基础(九)
- Silverlight 2 应用程序部署到任意HTML页面
- 人工智能积极赋能保险业
- 推荐一个工具包自定义HTTP 404错误
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- awk 列求和计算
- C++复习笔记——0_零碎问题及解决笔记
- C++复习笔记——C++ 关键字
- python函数——字典设置默认值 setdefault()
- Day 3:从尾到头打印链表
- python函数——字典get()方法
- Day 4:重建二叉树
- python函数——字典设置默认值get() 与 setdefault()区别
- tensorflow学习笔记——0_零碎问题及解决笔记
- MapReduce工作笔记——Hadoop MR Streaming通用模板
- MapReduce工作笔记——Hadoop shell 常用文件操作命令
- Julia简易教程——4_字符串操作
- MapReduce工作笔记——Job上传普通文件和大文件
- MapReduce工作笔记——Streaming Job中jar包上传与使用指定
- MapReduce工作笔记——Job提交任务中-D和-jobconf的区别