Використовуючи AutoHotKey для зміни джерела аудіовиходу?


3

У мене на машині є два первинних аудіовиходи: динаміки та гарнітура USB. Наразі в Windows 7 Professional x64 я ввожу "звук" у меню "Пуск пошуку", щоб відкрити це діалогове вікно:

Діалог звуку Windows 7

Мене цікавить лише два найкращі варіанти для цілей цього питання. Мені хотілося б знати, чи є спосіб в AutoHotKey переключитися з «Динаміків (4- шенхейзер USB-гарнітура)» на «Динаміки (аудіо високої чіткості VIA)», тому я можу уникнути необхідності відкривати це діалогове вікно кожного разу, коли я хочу переключитися. Дякую!


Отже, ви хочете автоматизувати тут змінити пристрій за замовчуванням ? Схожі: superuser.com/questions/393163/…
iglvzx

Відповіді:


4

Я знайшов собі відповідь завдяки допомозі iglvzx, яка вказала правильну термінологію!

; Toggles default audio device in Control Panel (switches between headset and speakers).
ScrollLock:: 
  toggle:=!toggle ;toggles up and down states. 
  Run, mmsys.cpl 
WinWait,Sound
if toggle
  ControlSend,SysListView321,{Down 1}
Else
  ControlSend,SysListView321,{Down 2}
ControlClick,&Set Default
ControlClick,OK 
return

ScrollLockце клавіша, яку я натискаю. toggleє змінною, яку AutoHotKey утримує (наскільки я можу сказати), яку використовує умовний внизу. mmsys.cpl- це вікно, зображене вище (введіть його у пункті Run, щоб побачити самі!). Решта команд стосуються керування користувальницьким інтерфейсом: від вибору правильної частини вікна до імітації "клацань" до натискання "Встановити за замовчуванням" (має відповідати поточній мові) до натискання кнопки "ОК".

Коли це буде запущено, ви помітите, що вікно фізично спливе на півсекунди, оскільки воно фізично проходить і вибирає все. Хоча я вважаю за краще варіант без вікон, це працює чудово, оскільки фокус повертається до правильного вікна (навіть на повноекранних іграх) після його запуску.


1
Класно! Я збирався повернутися до цього, але ви вже це зрозуміли. Радий, що можу вказати тобі в правильному напрямку. :)
iglvzx

0

Я просто переробив сценарій "aafe". Він працює з декількома виходами та циклами через них:

; Audio Output Default cycle
ScrollLock:: 
    Run,mmsys.cpl
    WinWait,YOURSOUNDWINDOWNAME
    loop,20 ; Exits loop after 20 runs. Good if there's just one output.
    {
        ControlSend,SysListView321,{Down}
        ControlGet,isEnabled,Enabled,,&YOURSETDEFAULTBUTTONNAME
        if(!isEnabled)
        {
            break
        }
    }
    ControlSend,SysListView321,{Down}
    ControlGet, isEnabled, Enabled,, &YOURSETDEFAULTBUTTONNAME
    if(!isEnabled)
    {
        ControlSend,SysListView321,{Home}
    }
    ControlClick,&YOURSETDEFAULTBUTTONNAME
    ControlClick,OK
    WinWaitClose
    SoundPlay, *-1
return

Змініть текст у всіх заголовках на назву звукового вікна та назву кнопки «Встановити за замовчуванням». Зберігайте "! &"


0

Ось рішення, яке перебирає всі аудіопристрої та виключає ті, які вам не потрібні, як-от S / PDIF або цифровий вихід за допомогою Windows Key + 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.