এখানে একটি সমাধান যা সমস্ত অডিও ডিভাইসের মাধ্যমে লুকিয়ে থাকে এবং আপনি যা চান তা বাদ দেবেন না, যেমন S / PDIF বা উইন্ডোজ কী + Shift + W ব্যবহার করে ডিজিটাল আউটপুট।
#+w::
IfWinExist Sound
{
WinKill Sound
}
Run rundll32.exe shell32.dll`,Control_RunDLL mmsys.cpl`,`,0
WinWait,Sound
IfWinNotActive,Sound WinActivate,Sound
WinWaitActive,Sound
ControlSend,SysListView321,{Home}
x := 1
totalDevicesCount := 0
isSecondLoop := false
isEnabled := false
; ControlGet, isEnabled, Enabled,,&Set Default
ControlGet, totalDevicesCount, List, Count, SysListView321
; isEnabled AND
StringCaseSense Off
loop
{
ControlGet, Current, List, Selected, SysListView321
if(InStr(Current, "default device") OR x > totalDevicesCount)
{
break
}
x := x + 1
ControlSend,SysListView321,{Down}
}
if (x >= totalDevicesCount)
{
ControlSend,SysListView321,{Home}
x := 1
}
loop
{
ControlGet, Current, List, Selected, SysListView321
ControlGet, isEnabled, Enabled,,&Set Default
; msgbox %x% %isEnabled% %Current%
; exclude output option with the name specified
if(InStr(Current, "Realtek Digital Output"))
{
isEnabled := false
}
if (x >= totalDevicesCount AND not isEnabled)
{
ControlSend,SysListView321,{Home}
x := 1
isSecondLoop := true
; msgbox breaking now %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
break
}
if (x > totalDevicesCount OR isEnabled)
{
; msgbox breaking now %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
break
}
if (x >= totalDevicesCount AND isSecondLoop)
{
; infinite loop breaker if no devices avaliable
; msgbox breaking sec %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
break
}
ControlSend,SysListView321,{Down}
x := x + 1
}
;ControlGet, Current, List, Selected, SysListView321
;msgbox %Current%
Sleep 100
ControlClick,&Set Default
ControlClick,OK
; SoundPlay *48
WinKill Sound
return
আমি এই ফোরামে dan112123 দ্বারা পোস্ট করা থেকে এই স্ক্রিপ্ট পরিবর্তন: http://www.autohotkey.com/board/topic/2306-changing-default-audio-device/page-4