vb6.0获取系统主音量

handechen 2017-05-20 06:49:02
想使用vb获取系统主音量。不是获取波形音量……所以不能用waveOutGetVolume
求大神指点
vb6.0,win10。
...全文
2142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-05-22
  • 打赏
  • 举报
回复
试试用API Monitor监视系统的音量控制。
舉杯邀明月 2017-05-20
  • 打赏
  • 举报
回复
引用 2 楼 bakw 的回复:
没看清。。。
不过waveOutGetVolume就是调的主音量啊,不过win10下没有试过,xp系统下没毛病。

XP系统下也是“有毛病”的,你自己没注意到而已。 

楼主的意思,需要的是“最左边”那个,而这段代码获取/设置的,是第2个“波形”的通道。


另外,Integer <---> 通过字符串来操作,是不是舍近求远了?
直接一个位运算,不就出来了吗,代码简单,运行效率高出N倍…………

Win7中,已经找不到“各个通道”分别控制音量的地方了,它好像以“进程”来进行控制。
Win10也是那个鸟样的…………


笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
只找到个 GetDefaultAudioEndpoint
笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
没看清。。。 不过waveOutGetVolume就是调的主音量啊,不过win10下没有试过,xp系统下没毛病。
笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
主要是这两个API,一个读音量,一个写音量, 详细的自己可以网上查查,代码没测试,可能会有些小问题,不过用法确定没问题的。 waveOutGetVolume waveOutSetVolume

Private Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
'音量范围0~100
Public Function GetVolume() As Integer
    Dim V As Long
    waveOutGetVolume 0, V
    V = CLng("&H" & Right(Hex(V), 4))
    GetVolume = CInt(100 * V / 2 ^ 16)
End Function

Public Sub SetVolume(ByVal Volume As Integer)
    Dim Str As String
    Str = Right(”0000“ & Hex(Volume/100 * 2 ^ 16), 4)
    waveOutSetVolume 0, CLng("&H" & Str & Str)
End Sub
笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
不过现在好多程序都是触摸屏软件在做了,用电脑的话本身的硬件问题实在太多了。
笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
有进程守护的,就怕前台程序意外崩溃, 而且启动的时候explorer的坑被我占了, 出来的是我的程序,而不是桌面 所以把程序kill了也出不来桌面,不过程序正常退出之后桌面还是还出来的,软件里设置了退出之后是回桌面还是关机, 然后任务管理器还是可以调出来的
舉杯邀明月 2017-05-20
  • 打赏
  • 举报
回复
引用 5 楼 bakw 的回复:
我的程序都是全屏独占的,不在我程序里调音量他们也找不到地方调了
流氓………… 你独占全屏也没事啊,别人把你最小化,或者Kill你的进程就行了。 
笨狗先飞 2017-05-20
  • 打赏
  • 举报
回复
我的程序都是全屏独占的,不在我程序里调音量他们也找不到地方调了

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧