找回密码
 加入
搜索
查看: 24091|回复: 41

[系统综合] 如何获取系统播出的音量大小??

 火... [复制链接]
发表于 2012-3-28 15:29:33 | 显示全部楼层 |阅读模式
悬赏600金钱未解决
本帖最后由 gapkiller 于 2012-3-29 16:34 编辑

不是system master volume
是系统内播出的声音大小, win7下可以看到, 如下图绿色部分, 是一个值, 根据系统播出声音大小可变.


搜索了一下论坛, 都是系统音量大小, 而且win7 下都不能用...

请教~~

再次说明一下, 想要获取的, 不是系统音量大小, 是播出音量大小.
就算系统音量固定为100%, 播出的声音也是有大有小, 我是想要这个值, 类似于声音的波形.
再加300...

附件: 您需要 登录 才可以下载或查看,没有账号?加入
发表于 2012-3-28 16:26:21 | 显示全部楼层
感觉bass.dll中有函数应该可以达到楼主的功能要求。

评分

参与人数 1金钱 +10 收起 理由
gapkiller + 10 谢谢关注

查看全部评分

发表于 2012-3-28 20:06:29 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-3-28 20:08 编辑

回复 1# gapkiller

想不到其他方法,把afan版主的代码改了一点.
#include <GuiToolbar.au3>
$vol = GetSystemVolume()
MsgBox(0, '', $vol)

Func GetSystemVolume($frag = 0)
        Local $info, $sR, $i, $i_C, $txt
        Local $hTb = ControlGetHandle('[class:Shell_TrayWnd]', '', 'ToolbarWindow321')
        For $i = 0 To _GUICtrlToolbar_ButtonCount($hTb) - 1
                $i_C = _GUICtrlToolbar_IndexToCommand($hTb, $i)
                $txt = _GUICtrlToolbar_GetButtonText($hTb, $i_C)

                $sR = StringRegExp($txt, '^扬声器\:\h?(\d+)%', 3)
                If Not @error Then
                        If $frag < UBound($sR) Then
                                $info = $sR[$frag]
                        Else
                                $info = 'error'
                        EndIf
                EndIf
        Next
        Return $info
EndFunc   ;==>GetSystemVolume

评分

参与人数 1金钱 +16 贡献 +1 收起 理由
zldfsz + 16 + 1 牛X

查看全部评分

发表于 2012-3-28 20:10:04 | 显示全部楼层
回复 3# lixiaolong


    要是音量图标被隐藏的就获取不到哦
发表于 2012-3-28 20:14:01 | 显示全部楼层
回复 4# zldfsz

对,就是有这个缺点,论坛里没找到方法...
这个我也想知道方法,我找找其他方法吧.
发表于 2012-3-28 20:46:54 | 显示全部楼层
不懂调试 看高手解答
发表于 2012-3-28 21:33:22 | 显示全部楼层
本帖最后由 zldfsz 于 2012-3-28 22:35 编辑

回复 5# lixiaolong


    不过这样已经好多了,加上你的 这个http://www.autoitx.com/forum.php ... 9941&highlight=
设置音量就更方便了,加个判断,没获取到就用原来的方法,获取到了就根据值的大小来最大或减小,就不用减小到0再增大的方法了,当然如果隐藏时也能判断那就更好了
发表于 2012-3-28 22:37:55 | 显示全部楼层
回复 7# zldfsz

搞定~
#include <GuiToolbar.au3>

MsgBox(0, '', SystemVolume())

Func SystemVolume()
        Local $vol = Win7GetSystemVolume()
        If Not $vol Then $vol = Win7GetSystemVolume(1)
        Return $vol
EndFunc   ;==>SystemVolume

Func Win7GetSystemVolume($frag = 0)
        Local $info, $sR, $i, $i_C, $txt
        Local $Handle = '[class:Shell_TrayWnd]'
        If $frag Then $Handle = '[class:NotifyIconOverflowWindow]'
        
        Local $hTb = ControlGetHandle($Handle, '', 'ToolbarWindow321')

        For $i = 0 To _GUICtrlToolbar_ButtonCount($hTb) - 1
                $i_C = _GUICtrlToolbar_IndexToCommand($hTb, $i)
                $txt = _GUICtrlToolbar_GetButtonText($hTb, $i_C)

                $sR = StringRegExp($txt, '^扬声器\:\h?(\d+)%', 1)
                If Not @error Then
                        $info = $sR[0]
                EndIf
        Next
        Return $info
EndFunc   ;==>Win7GetSystemVolume

评分

参与人数 2金钱 +50 贡献 +14 收起 理由
zldfsz + 20 + 9 太好了
gapkiller + 30 + 5 虽然不是我想要的,还是很感谢..

查看全部评分

发表于 2012-3-28 22:54:35 | 显示全部楼层
受用~,学习了~!!
 楼主| 发表于 2012-3-28 22:55:53 | 显示全部楼层
回复 8# lixiaolong


    我已经说了, 想得到的不是系统音量大小, 而是播出声音大小.

就是系统产生声音时, 跳动的绿色的部分的值.
发表于 2012-3-28 23:00:59 | 显示全部楼层
回复 10# gapkiller

不好意思,是我没看请
发表于 2012-3-28 23:12:13 | 显示全部楼层
哇..................................
发表于 2012-3-28 23:20:43 | 显示全部楼层
回复 8# lixiaolong


    这真是太爽了,呵呵
发表于 2012-3-29 00:52:07 | 显示全部楼层
不知道 gapkiller 搜过类似频谱之类的没有,有用否?

p.s, 8楼的2位评分者的头像上演了一出喜剧……
发表于 2012-3-29 00:56:18 | 显示全部楼层
不知道 gapkiller 搜过类似频谱之类的没有,有用否?

p.s, 8楼的2位评分者的头像上演了一出喜剧……
afan 发表于 2012-3-29 00:52

呵呵,观察细微,佩服
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 20:35 , Processed in 0.087320 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表