Autohotkey 中文论坛

完整版: 我也写了一个鼠标中键控制音量的脚本
你目前正在浏览的是简化版. 请点击这里浏览完整版
页数: 1 2
论坛已经有人发了一个了,但那个需要Autohotkey_L的支持,我写的这个功能一样,但不需要Autohotkey_L的支持。关键代码如下:
代码:
;当鼠标位于任务栏时,鼠标中键滚向与自己相反的方向增大音量
VolumeControlUp()
{
;设置屏幕为基坐标系
CoordMode,Mouse,Screen

;base为任务栏上界的纵坐标,这个值可以用AutoIt3 Window Spy获得
base = 770
;获取当前鼠标的纵坐标
MouseGetPos,,Y

;若纵坐标大于任务栏的上界坐标,则鼠标位于任务栏内
if (Y > base)
{
;滚轮滚动一次增加的音量为1,这个值可以自己调节
SoundSet,+1
}
;若纵坐标小于任务栏的上界坐标,则鼠标位于任务栏外
Else
{
; 正常发送该动作的功能
MouseClick,WU
}
Return
}
;当鼠标位于任务栏时,鼠标中键滚向自己的方向减小音量
VolumeControlDown()
{
CoordMode,Mouse,Screen

base = 770
MouseGetPos,,Y

if (Y > base)
{
SoundSet,-1
}
Else
{
MouseClick,WD
}
Return
}
;当鼠标位于任务栏时,按下鼠标中键静音
VolumeControlMute()
{
CoordMode,Mouse,Screen

base = 770
MouseGetPos,,Y

if (Y > base)
{
Send,{Volume_Mute}
}
Else
{
MouseClick,Middle
}
Return
}
WheelUp::VolumeControlUp()
WheelDown::VolumeControlDown()
MButton::VolumeControlMute()
只注释了一个函数,其他两个函数差不多了,就不再赘述。
不是每个人的任务栏都在下面,有些人喜欢在上面,有些人喜欢在旁边。当然,你的代码给了大家个思路。:)

[ 本帖最后由 bugmenot 于 2008-8-9 23:57 编辑 ]
呵呵 有那么麻烦么??
代码:
WheelUp::SoundSet, +10
WheelDown::SoundSet, -10
就两句吧 !
那还是借用 Lexikos的MouseIsOver(WinTitle)这个函数好了,那样不论你的任务栏在哪里都能准确判断了。
代码:
MouseIsOver(WinTitle) {
MouseGetPos,,, Win
return WinExist(WinTitle . " ahk_id " . Win)
}
WheelDown::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
        SoundSet,-1
Else
        MouseClick,WD
Return

WheelUp::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
        SoundSet,+1
Else
        MouseClick,WU
Return

MButton::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
        Send,{Volume_Mute}
Else
        MouseClick,Middle
Return

[ 本帖最后由 rainerzhou 于 2008-8-10 00:26 编辑 ]
那两句没判断鼠标是否位于任务栏上哎
恩 这回的代码就 比较漂亮了!
B2,图片不存在。另,那样的代码是全局的,滚轮还有更多的用处。

rainerzhou,thx,试试。
SoundSet,+1
怪不得没感觉。。。修改为 SoundSet,+10 效果明显,再加上可视化的话,perfect!
修改了一下,增加了一个Tooltip用来显示当前音量以及静音状态:
代码:
MouseIsOver(WinTitle) {

MouseGetPos,,, Win

return WinExist(WinTitle . " ahk_id " . Win)

}

WheelDown::

If (MouseIsOver("ahk_class Shell_TrayWnd"))

{

        SoundSet,-3

        SoundGet,volume

        ToolTip,当前音量%volume%`%

        Sleep,1000

        ToolTip

}

Else

        MouseClick,WD

Return



WheelUp::

If (MouseIsOver("ahk_class Shell_TrayWnd"))

{

        SoundSet,+3

        SoundGet,volume

        ToolTip,当前音量%volume%`%

        Sleep,1000

        ToolTip

}

Else

        MouseClick,WU

Return



MButton::

If (MouseIsOver("ahk_class Shell_TrayWnd"))

{

        Send,{Volume_Mute}

        SoundGet,master_mute,,mute

        ToolTip,静音%master_mute%

        Sleep,1000

        ToolTip

}

Else

        MouseClick,Middle

Return
停一秒,+3 太慢了,还不如直接用系统的。
以 10 为增量,并且用了 TrayTip 来显示音量。

MouseIsOver(WinTitle) {
MouseGetPos,,, Win
return WinExist(WinTitle . " ahk_id " . Win)
}
WheelDown::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
{
SoundSet,-10
SoundGet,volume
TrayTip, 音量, % Ceil(volume)`%,1
}
Else
MouseClick,WD
Return

WheelUp::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
{
SoundSet,+10
SoundGet,volume
TrayTip,音量, % Ceil(volume)`%,1
}
Else
MouseClick,WU
Return

MButton::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
{
Send,{Volume_Mute}
SoundGet,master_mute,,mute
TrayTip,静音,%master_mute%,1
}
Else
MouseClick,Middle
return
学习了!!
引用:原帖由 bugmenot 于 2008-8-10 20:57 发表 [Image: back.gif]
以 10 为增量,并且用了 TrayTip 来显示音量。

MouseIsOver(WinTitle) {
MouseGetPos,,, Win
return WinExist(WinTitle . " ahk_id " . Win)
}
WheelDown::
If (MouseIsOver("ahk_class Shell_TrayWnd"))
{ ...
以多少为增量完全根据个人习惯,10我就觉得太大了。TrayTip很多时候会被前面的窗口挡住,个人觉得不太好。
没遇到过 TrayTip 被挡住。。
先谢谢楼主。

可否把TrayTip提示框的显示时间设置短点,3-5秒即可。
学习了,音量控制
还在学习中,先拿来用了,谢谢
-{:3_51:}第三行 写的 好简单哦 (*^__^*) 嘻嘻……
-偶 喜欢哦
在win7和vista中,soundset不能改变系统音量了。帮助文件里面有个解决办法:In the properties dialog for the file "AutoHotkey.exe" (or a compiled script), change the compatibility setting to "Windows XP".即将脚步编译,然后以兼容模式运行。
@bugmenot
TrayTip 来显示音量很不错,可惜只能调整音量,不能调整波形。
页数: 1 2
参考网址