Answers:
解决所有棘手的Windows自动化问题的解决方案:AutoIt!
把这个AutoIt并编译
;-----Configuration-----
;The title of the sound config window.
Dim $ConfigWindowTitle = "Sound"
;-----End of configuration----
Dim $ItemNumber = 1
If $CmdLine[0] >= 1 Then ;If we have a parameter...
$ItemNumber = $CmdLine[1] ;...we should press the button the specified number of times.
EndIf
Run("control mmsys.cpl") ;Run the sound control applet and hide it.
WinWaitActive($ConfigWindowTitle) ;Wait for it to be active before sending keystrokes.
Send("{TAB}{TAB}{TAB}{TAB}") ;Put the focus on the list
For $i = 1 to $ItemNumber Step 1
Send("{DOWN}")
Next
Send("!s") ;Press Alt + S to set the selected device as the default.
WinClose($ConfigWindowTitle)
现在创建一个快捷方式,并在“目标”中放置已编译可执行文件的路径。对于参数,将声音设备的编号放在要切换到的列表中。(要切换到列表中的第一项,请输入1,列表中的第二项,请输入2,依此类推)。如果需要键盘快捷键,请使用快捷键的属性窗口中的“快捷键”字段。
我一直在寻找可以做您想做的事情的方法,发现没有编程方式可以在Vista / 7中切换音频设备。Microsoft并不是程序员决定要做的事情,因此我制作了此脚本来自动化该过程。这不是最好的方法,因为它会弹出窗口以更改设备(必要),但是它可以创建快捷方式来更改声音的输出设备。
我认为,默认音频转换器是目前最好的解决方案。
它使用未公开的系统调用而不是模拟键盘按键,这意味着您可以在全屏应用程序中使用它而不必担心。
@Dan Walker不错的解决方案,但并不完美;)
该脚本使用文件的存在来实际执行切换,因此您可以使用相同的快捷方式在播放设备之间切换。这只是一个简单的编辑:
;-----Configuration-----
;The title of the sound config window.
Dim $ConfigWindowTitle = "Sound"
;-----End of configuration----
Dim $ItemNumber = 1 ; The first itme in the audio list
If FileExists ("a") Then; Use the existence of a file to know if we should toggle
FileDelete("a")
$ItemNumber = 3 ; The audio playback device you want to toggle to
Else
FileOpen("a", 1)
FileClose("a")
EndIf
Run("control mmsys.cpl") ;Run the sound control applet and hide it.
WinWaitActive($ConfigWindowTitle) ;Wait for it to be active before sending keystrokes.
Send("{TAB}{TAB}{TAB}{TAB}") ;Put the focus on the list
For $i = 1 to $ItemNumber Step 1
Send("{DOWN}")
Next
Send("!s") ;Press Alt + S to set the selected device as the default.
WinClose($ConfigWindowTitle)
用谷歌搜索了一段时间,唯一对我有用的方法是来自AutoHotKey的脚本,我唯一希望做的就是在后台完成此操作。这是脚本:
Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down}
ControlClick,&Set Default
ControlClick,OK
您可以更改它以满足您的需求
SendInput {Down}
代替ControlSend,SysListView321,{Down}
。我还必须更改{Downs}的数量以匹配我的音频设备。
fakt的解决方案就像一个魅力。这里有一个自动热键的小脚本,当您按下“ F4”时,第一个音频设备将被选择为默认音频设备;当按下“ F3”时,第二个将被选择为默认音频设备。此版本适用于所有Windows版本。使用Win 7 64测试。
F3::
Run, mmsys.cpl
WinWaitActive,Sound
ControlSend,SysListView321,{Down}
ControlSend,SysListView321,{Down}
Sleep, 50
ControlClick,Button2
ControlClick,OK
return
F4::
Run, mmsys.cpl
WinWaitActive,Sound
ControlSend,SysListView321,{Down}
Sleep, 50
ControlClick,Button2
ControlClick,OK
return
@cptloop Default Audio Changer非常好,但是在将其设置为默认设备之后,令人讨厌的是不会将其设置为默认通信设备。
那使我找到了Audio Switcher,它具有几个附加功能:
我唯一不喜欢的是,它不允许您使用单个热键在两个设备之间切换,每个设备都需要配置自己的热键。也就是说,v2.0正在开发中,并有望进行一些功能改进以及插件支持。他们还发布了基础API,因此可以创建自己的定制解决方案。
编辑:根据xenolightning / AudioSwitcher_v1#607,切换/循环设备的功能已在v2.0中实现。