1

Тема: AHK: Windows 7 - смена устройств воспроизведения звука

И так сабж.
Имеется несколько устройств для воспроизведения, в простом варианте колонки и наушники.
Т.е. Пуск - Настройка - Панель управления - Звук
(для Realtek HD Audio)
http://i32.fastpic.ru/thumb/2011/1014/b1/083332d399424091a811febf39e245b1.jpeg

Проблема: Очень неудобно переключать ПО с/на колонки<->наушники, очень много операций.
И некоторое ПО просто отказывается выдавать сигнал, т.е.  звук, в наушники... но это при конфигурации когда задействованы оба устройства одновременно это я уже отключил.

Я достаточно долго искал что то что умеет это делать по нажатию комбинаций клавиш пока не наткнулся на: Windows 7 Tip: How to change the default audio device with a hotkey

 #+a::
Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down}
ControlGet, isEnabled, Enabled,,&Set Default
if(!isEnabled)
{
  ControlSend,SysListView321,{Down 2}
}
ControlClick,&Set Default
ControlClick,OK
WinWaitClose
SoundPlay, *-1
return

но видимо из за разницы:
- языка (Windows);
- конфигурации (моё предположение);
- и моего не знания на должном уровне AutoHotkey (абсолютная уверенность).

Я не сумел приспособить/адаптировать скрипт под себя, т.е. то чего я добился выглядит так:

#Tab::
Run, mmsys.cpl
WinWait,Звук
ControlSend,SysListView321,{Down}
return

появляется панель с позиционирование на первое устройство, см. скриншот. А мне ещё хотелось бы сделать управление микрофоном, но это уже детали, мне бы сделать переброску выходных аудио устройств.

Трассировку делал, проверял что куда идёт... не помогает.
Кодировку менял с UTF-8 на ASCII и обратно при описании пунктов/кнопок окна - тот же результат.
Разные версии AutoHotkey ставил.

P.S. Хотя я и программист, но не пишу ПО под Windows и т.д. - я программирую МК.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

2

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Посмотрите здесь — там, кроме приведённой, ещё одна ссылка на форум, и ссылка на утилиту. Сам не пробовал.

3

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Сенкс, работает - я про утилиту, правда её лучше использовать через ком строку, те

пишет:

Командная строка утилиты DefSound довольна проста. Если запускать утилиту без параметров, то она будет мирно висеть в вашем системном трее. По клику правой кнопки мыши выпадает контекстное меню, в котором можно изменять устройство аудио воспроизведение по-умолчанию.

При запуске утилиты с параметрами, процесс изменяет текущее аудио устройство и выходит. Формат командной строки выглядит следующим образом:

DefSound.exe <NUMBER> [STRING]

т.к. в трее она выдаёт много не нужной информации.
Используя AHK и DefSound.exe можно достичь желаемого.

Но неужели одним AHK сделать нельзя? Просто я думаю что ошибка в двух строчках из за локализации

ControlGet, isEnabled, Enabled,,&Set Default

и

ControlClick,&Set Default

остальное правиться и работает. А?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

4 (изменено: Grey, 2011-10-14 13:55:52)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

#Tab::
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If ErrorLevel
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, По умол&чанию
      Sleep, 50
      If !isEnabled
        ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, По умол&чанию
      Sleep, 500
      Process, Close, rundll32.exe
      Exit
   }
   MsgBox, 262192,, Epic fail, 1
   Return

5 (изменено: Indomito, 2011-10-14 13:51:11)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Нет, просто позиционируется на второе устройство (наушники, если смотреть мой скриншот) и выходит.
Блин мистика, т.е. понятно что где то что то не так, а что - хз.

Те не мистика, если запустить WSpy то названия контролов не совпадают... сейчас нарисую скриншот

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

6

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Я отредактировал скрипт выше, пробуйте.

7

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Ага, это я уже делал... но немного по другому )) Сейчас проверю.
http://i29.fastpic.ru/thumb/2011/1014/54/bac79522f4db8c6059a6029c6c7e8354.jpeg тут как раз По умол&чанию.... секундочку проверю

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

8 (изменено: Indomito, 2011-10-14 14:13:34)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Нет, не получается всегда отработка блока

If ErrorLevel {} MsgBox, 262192,, Epic fail, 1

что бы я не менял (не скрипт, а устройства по умолчанию)... может надо ещё что то по русски написать?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

9

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Исправте везде По умол&чанию на Button2

10

Re: AHK: Windows 7 - смена устройств воспроизведения звука

нет всё нормально, просто не тот скрипт поправил - переброс работает. Спасибо... блин я думал придётся исходник на С править )))))

P.S. Я просто пропустил одну строчку при копировании Run, mmsys.cpl ))

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

11

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Сразу вопрос, т.к. я чувствую сам не напишу... как вкл/выкл микрофона сделать, просто по аналогии не получается там контекстное меню надо использовать. Просто микрофон мне редко нужен, но близко от динамиков и получается весьма не удобно, а отодвинуть не могу... ну долго объяснять.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

12 (изменено: Grey, 2011-10-14 14:38:06)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Space::PostMessage, 0x319,, 24<<16,, ahk_class Progman

13

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Выключить и включить (не меняя настроеек) - просто он достаточно чувствительный, а когда я поменял настройки он теперь постоянно работает.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

14

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey пишет:
Space::PostMessage, 0x319,, 24<<16,, ahk_class Progman

я попытался понять что это даёт, но даже кода 0x319 не нашёл... поясни в двух словах.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

15

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Это отправка сообщения Program Manager'у. 0x319 - WM_APPCOMMAND, 24 (APPCOMMAND_MICROPHONE_VOLUME_MUTE) - это cmd составная lParam. Вот другой вариант средствами АНК:

Space::SoundSet, % (Mute:=!Mute) ? 1:0, Microphone, Mute, 2

16

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Сенкс, второй вариант мне понятен, а первый не срабатывал, т.е. микрофон не отключался, проверю второй.
P.S. Не думал что так просто будет, хотя может и не сработать... проверю и напишу.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

17

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey проверил - не помогает, т.е. микрофон при приближении к колонкам фонит, ну и его статус не меняется, вот я про что, см. скриншот.

http://i29.fastpic.ru/thumb/2011/1014/74/c096402e4e4ff39f6dda477d7812c074.jpeg

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

18

Re: AHK: Windows 7 - смена устройств воспроизведения звука

У меня звуковая карта от Creative (встроенную я отключил, ибо не фонтан), всё, что выкладывал в этой теме, у меня работает. Наверное надо было с самого начала провести сбор информации про Вашу звуковую карту, ну так не поздно сделать это и сейчас: запустите скрипт для анализа звуковой карты из мануала по команде SoundSet, результат анализа, в виде скриншота окна, выложите сюда.

19

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey Вот. Результат выполнения Скрипт для анализа звуковой карты


http://i27.fastpic.ru/thumb/2011/1014/dd/77bf1f5d92bb44e003de0cdc4aeadfdd.jpeg

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

20 (изменено: Grey, 2011-10-14 23:03:24)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

В коде (пост #15) двойку на пятёрку исправте/опробуйте.

21

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Можно использовать setupapi для манипуляций с устройствами. К сожалению у меня сейчас нет компьютера с несколькими звуковыми картами, поэтому код привести не могу, но судя по названию тут нужно использовать функцию SetupDiSetSelectedDevice.
В качестве примера приведу код получения списка устройств:

CM_Enumerate_Classes(ClassIndex, ClassGuid, Flags)
; функция получает список классов устройств 
{
   return DllCall("cfgmgr32.dll\CM_Enumerate_Classes", "int", ClassIndex, "int", ClassGuid, "int", Flags)
}

SetupDiGetClassDescription(ClassGuid, ClassDescription, ClassDescriptionSize, RequiredSize)
; функция получает текстовое наименование класса устройств
{
   return DllCall("Setupapi.dll\SetupDiGetClassDescription", "int", ClassGuid, "int", ClassDescription, "int", ClassDescriptionSize, "int", RequiredSize)
}

SetupDiGetClassDevs(ClassGuid, Enumerator, hwndParent, Flags)
; получает список устройств принадлежащих классу
{
   return DllCall("Setupapi.dll\SetupDiGetClassDevs", "int", ClassGuid, "int", Enumerator, "int", hwndParent, "int", Flags)
}

SetupDiEnumDeviceInfo(DeviceInfoSet, MemberIndex, DeviceInfoData)
; получает информацию об устройстве по его классу и порядковому номеру
{
   return DllCall("Setupapi.dll\SetupDiEnumDeviceInfo", "int", DeviceInfoSet, "int", MemberIndex, "int", DeviceInfoData)
}

SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, Property, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize)
; возвращает дополнительную информацию об устройстве
{
   return DllCall("Setupapi.dll\SetupDiGetDeviceRegistryProperty", "int", DeviceInfoSet, "int", DeviceInfoData, "int", Property, "int", PropertyRegDataType, "int", PropertyBuffer, "int", PropertyBufferSize, "int", RequiredSize)
}

DllCall("LoadLibrary", "str", "Setupapi.dll")
VarSetCapacity(RequiredSize, 4)
Gui, Add, TreeView, r20 w600
x:=0
i:=0
loop
{
   VarSetCapacity(ClassGuid_%i%, 16)
   x:= CM_Enumerate_Classes(i, &ClassGuid_%i%, 0)
   if x=37 ; CR_NO_SUCH_VALUE = 37
      break
   VarSetCapacity(ClassDescription_%i%, 100)
   SetupDiGetClassDescription(&ClassGuid_%i%, &ClassDescription_%i%, 100, &RequiredSize)
   str := StrGet(&ClassDescription_%i%)
   P_%i% := TV_Add(str)
   DeviceInfoSet_%i%:=SetupDiGetClassDevs(&ClassGuid_%i%, 0, 0, 2)
   j:=0
   VarSetCapacity(DeviceInfoData_%i%_%j%, 28)
   NumPut(28,DeviceInfoData_%i%_%j%)
   while SetupDiEnumDeviceInfo(DeviceInfoSet_%i%, j, &DeviceInfoData_%i%_%j%)
   {
	  VarSetCapacity(PropertyRegDataType_%i%_%j%, 4)
	  VarSetCapacity(PropertyBuffer_%i%_%j%, 512)
	  VarSetCapacity(RequiredSize_%i%_%j%, 4)
	  x:=SetupDiGetDeviceRegistryProperty(DeviceInfoSet_%i%, &DeviceInfoData_%i%_%j%, 0x00, 0, &PropertyBuffer_%i%_%j%, 512, &RequiredSize_%i%_%j%)
	  TV_Add(StrGet(&PropertyBuffer_%i%_%j%),P_%i%)
	  j++
	  VarSetCapacity(DeviceInfoData_%i%_%j%, 28)
	  NumPut(28,DeviceInfoData_%i%_%j%)
   }
   i++
}

Gui, Show
return

GuiClose:
ExitApp

Собственно для решения данной задачи весь список получать не нужно. Если найду где-нибудь звуковую карту, то обязательно напишу пример смены основного устройства, но надеюсь, что это не потребуется .

22

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Уже попробовал сразу - эффект тот же, надо видимо в настройки аудио системы залезть и поправить что то... только вот что пока не знаю.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

23 (изменено: Grey, 2011-10-14 23:26:46)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Вообще со звуковыми командами, что-то творится не понятное, точнее начиная после версии 10.48.05 добрая половина из них у меня не работает, да и сам тест-анализ показывает не одинаковые результаты:
10.48.05http://s017.radikal.ru/i408/1110/4b/5a32dbdd3e86.jpghttp://s51.radikal.ru/i132/1110/69/55d5cca5420c.jpg1.1.05.00

24

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Может с микрофоном поступить как с колонками/наушниками? Там висят пустые устройства, может просто перекидывать на них и обратно?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

25

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Ну это реально сделать, и даже ввиде переключателя, только эффекта я не заметил:

Space::
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If ErrorLevel
   {
      WinWait, % "ahk_pid" ErrorLevel
      If !onStart
      {
         Send, +{Tab}{Right}
         Sleep, 50
         ControlGet, isEnabled, Enabled,, Button2
         Sleep, 50
         If !isEnabled
            ControlSend, SysListView321, {Down 2}
         Else
            ControlSend, SysListView321, {Up 2}
         Sleep, 50
         ControlClick, Button2
         Sleep, 500
;         Process, Close, rundll32.exe
         ControlClick, OK
      }
      Else
      {
         Send, +{Tab}{Right}
         Sleep, 50
         ControlGet, isEnabled, Enabled,, Button2
         Sleep, 50
         If !isEnabled
            ControlSend, SysListView321, {Up 2}
         Else
            ControlSend, SysListView321, {Down 2}
         Sleep, 50
         ControlClick, Button2
         Sleep, 500
;         Process, Close, rundll32.exe
         ControlClick, OK
      }
      onStart:=!onStart
      Exit
   }
   MsgBox, 262192,, Epic fail, 1
   Return

26

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey да, эффекта нет и я понял почему, просто нельзя включить не существующее устройство, но можно просто выключить микрофон. Вот см. скриншот

http://i27.fastpic.ru/thumb/2011/1015/95/1b43d7392bcc06bd4825837d5febea95.jpeg

У меня других идей нет, правда может быть выключить монопольное использование... правда я не очень понял на что это может повлиять и как )))

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

27

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Можно попробовать влиять на громкость, раз отключить полностью не получается:

Space::SoundSet, % (Vol:=!Vol) ? 0:100, Microphone,, 5

28 (изменено: Indomito, 2011-10-15 15:50:51)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

т.е. или чувствительность 0 или 100 процентов, я верно понял скрипт?

-----

Нулевая реакция и на слух и в конфиге микрофона.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

29

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Прости - я идиот LOL

http://i29.fastpic.ru/thumb/2011/1015/c6/9aa47a07b6f2d423e0a4ac5cf0df85c6.jpeg

Думаю и отключение работало, а фонил он из за того что был включён в режим воспроизведения.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

30

Re: AHK: Windows 7 - смена устройств воспроизведения звука

У меня с этим кодом перемещается сам ползунок, а с кодом из #15того поста ставился крест на динамике. А, что в конце списка осталось не отображено на этой картинке?
http://i27.fastpic.ru/big/2011/1014/dd/77bf1f5d92bb44e003de0cdc4aeadfdd.png

31

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey пишет:

У меня с этим кодом перемещается сам ползунок, а с кодом из #15того поста ставился крест на динамике. А, что в конце списка осталось не отображено на этой картинке?
http://i27.fastpic.ru/big/2011/1014/dd/ … eadfdd.png

1. У меня два динамика, в посте выше нижний я отключил сам.
2. А в коде из поста №15 там пустая строка - максимизировать или растянуть окно не удалось (я так и не понял почему)

После ручного отключения отпала необходимость в отключении микрофона... хотя пригодиться мало ли...

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

32 (изменено: Indomito, 2011-10-16 00:14:53)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey Я немного изменил твой скрипт по переключению выходных устройств, но исправил задержки - посмотри если не трудно. Заранее признателен.

#Tab::
; 1 - Колонки
; 2 - Наушники

reDevSet:
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1

   isDevSetTitle= Переключение звука
   isDevSet = Звук на колонки/наушники
  
   If (!ErrorLevel) 
     {    
      Process, Close, rundll32.exe       
      MsgBox, 16, %isDevSetTitle%, %isDevSet%, 0
     }

    else
    {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, По умол&чанию
      Sleep, 50
      isDevSet = Звук на колонки

      If !isEnabled
       {
        ControlSend, SysListView321, {Down}
        isDevSet = Звук на наушники
       }
   
      Sleep, 50
      ControlClick, По умол&чанию
      Sleep, 50
      Process, Close, rundll32.exe
      MsgBox, 1, %isDevSetTitle%, %isDevSet%, 5
    }
IfMsgBox, Cancel 
  Goto, reDevSet

Exit
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

33

Re: AHK: Windows 7 - смена устройств воспроизведения звука

#Tab::
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на "
   d:="колонки", h:="наушники"
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If ErrorLevel
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
;      Process, Close, rundll32.exe ; можно заменить
      ControlClick, Button4 ; на клик по кнопке ОК
      MsgBox,, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 1
      Exit
   }
   MsgBox, 16, % isDevSetTitle, Ошибка, 1
   Return

34

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Посмотри выше, я просто переписывал... и нужен ли return? Те у тебя он стоит, но сточки зрения правильности он вроде бы как и не нужен... хотя

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

35 (изменено: Indomito, 2011-10-16 00:47:31)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

В результате...

#Tab::
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на "
   d:="колонки", h:="наушники"
reDevSet:
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If (!ErrorLevel)
   {
    Process, Close, rundll32.exe
    MsgBox, 16, % isDevSetTitle, Ошибка, 0   
   }
   else
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
      ControlClick, Button4 ; на клик по кнопке ОК
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 5
   }
IfMsgBox, Cancel 
  Goto, reDevSet

Exit
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

36

Re: AHK: Windows 7 - смена устройств воспроизведения звука

В работе кода разницы нет, будь концовка такая:

...
      Sleep, 50
      Process, Close, rundll32.exe
      MsgBox, 1, %isDevSetTitle%, %isDevSet%, 1
      IfMsgBox, Cancel
         Goto, reDevSet
   }
   Return

или как в коде щас.

37 (изменено: Indomito, 2011-10-16 00:57:41)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Просто в if else писать goto как то... видимо привычка
Но так или иначе проблема в целом решена - тебе отдельное спасибо за помощь и потраченное на меня время.

P.S. И AHK мне в целом понравился, просто иногда надо написать что то быстро и просто.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

38 (изменено: Indomito, 2011-10-18 13:11:49)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

В продолжении мучений... я случайно заметил, что скрипт переключения

#Tab::
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на "
   d:="колонки", h:="наушники"
reDevSet:
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If (!ErrorLevel)
   {
    Process, Close, rundll32.exe
    MsgBox, 16, % isDevSetTitle, Ошибка, 0   
   }
   else
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
      ControlClick, Button4 ; на клик по кнопке ОК
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 3
   }
Sleep, 1000
IfMsgBox, Cancel 
  Goto, reDevSet

Exit

иногда не срабатывает, т.е. остаётся окно "Звук" с устройствами и выскакивает msgbox... т.е. отработка переключения колонки-наушники не происходит.
Где я накосячил? Может нужна задержка или что то ещё?

Вот успел сделать скриншот (просто msgbox "убегал")
http://i31.fastpic.ru/big/2011/1018/8f/979881228f5b25bf2009818eee87448f.png

P.S. Я подозреваю нужна задержка, но может быть я ошибаюсь.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

39

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Indomito пишет:

Я подозреваю нужна задержка...

М.б., например тут:

...
      Sleep, 250
      ControlClick, Button2
...

40 (изменено: Indomito, 2011-10-18 14:27:52)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Да, похоже...

      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
      ControlClick, Button4 ; на клик по кнопке ОК
      Sleep, 500   ;<----------------------------------------------------------------------------------------
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 3

я влепил сразу после написания на форуме и теперь сижу и нажимаю, пока ошибки не заметил.
P.S.  Поставлю ещё и туда куда ты подсказал... не помешает

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

41 (изменено: Indomito, 2011-10-18 14:51:13)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

B так методом научного тыка вычислил что задержка нужна вот где

      ControlClick, Button4 ; на клик по кнопке ОК
      Sleep, 250
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 3
   }

MsgBox сбивает выполнение посылки нажатия на По умолчанию и ОК.

P.S. Но почему, я так и не понял, только предположил, но ... но для этого я плохо знаю отработку событий в Windows 7

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

42

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Все задержки по 50мс, выставил два нажития на контрол (ControlClick, Button2,,,, 2) - пока багов не видел.

43

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Это не баг то по сути как выяснилось после долгих нажатий, а вот что..
1. Нажал на Win+Tab
2. Отработка переключения
3. Появление MsgBox и после его автоматического закрытия надо быстро нажать Win+Tab и тут то и проявляется моя проблемка.

Вывод:
Или блокировать Win+Tab до конца отработки скрипта
Или не надо так быстро нажимать.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

44

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey да, хотел спросить... вот смотри.
Есть - Process, Wait, rundll32.exe, 1
Нет - Process, Close, rundll32.exe
Может в этом дело?

И ещё, ты выставил ControlClick, Button2,,,, 2
А почему не поставил ещё - ControlClick, Button4,,,, 2
?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

45 (изменено: Grey, 2011-10-18 17:58:10)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Indomito пишет:

Есть - Process, Wait, rundll32.exe, 1
Нет - Process, Close, rundll32.exe
Может в этом дело?

В данном случае это одно и тоже, можно выбрать Process, Close, rundll32.exe (чем ControlClick, Button4), а можно выставить два нажатия на контрол (ControlClick, Button4,,,, 2).

Indomito пишет:

...блокировать Win+Tab до конца отработки скрипта...

Можно, за одно и простое нажатие на Tab.

Hotkey, #Tab, ChangeSource
Hotkey, IfWinActive, ahk_class #32770
Hotkey, Tab, BlockTabButton
BlockTabButton:
Return

ChangeSource:
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на ", d:="колонки", h:="наушники"
reDevSet:
   Hotkey, #Tab, BlockTabButton
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If (!ErrorLevel)
   {
      Process, Close, rundll32.exe
      MsgBox, 16, % isDevSetTitle, Ошибка, 0
   }
   Else
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2,,,, 2 ; клик по кнопке - По умол&чанию
      Sleep, 50
;      ControlClick, Button4,,,, 2 ; клик по кнопке - ОК
      Process, Close, rundll32.exe ; тоже, что и клик по кнопке - ОК
      MsgBox, 1, % isDevSetTitle
               , % isEnabled ? isDevSet . d : isDevSet . h, 1
      IfMsgBox, Cancel
         Goto, reDevSet
   }
   Hotkey, #Tab, ChangeSource
   Return

46

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Я написал

      ControlClick, Button4 ; на клик по кнопке ОК
      Process, Close, rundll32.exe
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 3

и ошибка исчезла, может я не прав, а может прав. Я исходил из того что процесс надо закрыть, но как я писал выше я не пишу ПО под Windows... хотя и попытался разобраться прочитав доп.литературу.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

47

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Ребят, спасибо за скрипты и обсуждения, а то я сбился с одним ПК с вин7.. постоянно проблеммы со звуком , ставится в дефолтное состояние, попробую ваш вариант на досуге.. удобно переключать из трея (!). Звук - VIA HD.... сам выставлялся в HDMI позицию, а всего там 11 (!!!) устройств обнаружено - производители не скупятся, , подкидывают работку пользователям...

Любители построили Ковчег, а профессионалы - Титаник.

48 (изменено: Indomito, 2011-10-20 10:50:38)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

stir
Вот последний рабочий вариант (в моей редакции), ну что бы не запутать с фрагментами обсуждений

#Tab::
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на "
   d:="колонки", h:="наушники"
reDevSet:
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If (!ErrorLevel)
   {
    Process, Close, rundll32.exe
    MsgBox, 16, % isDevSetTitle, Ошибка, 0   
   }
   else
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
      ControlClick, Button4 ; на клик по кнопке ОК
      Process, Close, rundll32.exe
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 5
   }
;Sleep, 1000
IfMsgBox, Cancel 
  Goto, reDevSet

Exit
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

49

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Indomito Попробовал конечную версию скрипта и получил лишь то, что выскакивает окно со списком устройств воспроизведения, подскажите пожалуйста как можно привязать ваш скрипт к моим устройствам. Может дело в том, что у меня одно устройство-это колонки встроенной аудиокарты, а второе-это колонки Sound Blaster?

50

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Да вроде всё работает:

SetKeyDelay, 100, 100

#Tab::
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If ErrorLevel
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      Process, Close, rundll32.exe
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

51

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey пишет:

Да вроде всё работает:

SetKeyDelay, 100, 100

#Tab::
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If ErrorLevel
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      Process, Close, rundll32.exe
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

Ух ты, здорово этот пашет на ура. Спасибо огроменное!!!!!

52 (изменено: Fiiiish, 2012-06-24 23:16:57)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey, Рано радовался, вылез конфликт с Google Chrome. Скрипт работает исправно до запуска выше упомянутого браузера, потом вылетает окно устройств воспроизведения и ничего не происходит, помогает перезапуск скрипта. Не подскажите, в чем может быть засада и как ее победить?

53

Re: AHK: Windows 7 - смена устройств воспроизведения звука

#Tab::
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,playback",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      WinClose, % "ahk_pid" PID
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

54

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Grey Спасибо,спасибо и еще раз спасибо!!! Как здорово, что набрел на этот форум, теперь буду пытаться постигнуть эту чудесную программу!

55

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Fiiiish пишет:

Grey Спасибо,спасибо и еще раз спасибо!!! Как здорово, что набрел на этот форум, теперь буду пытаться постигнуть эту чудесную программу!

Вы просили ответить в этой теме послав письмо, как я понимаю Grey уже помог вам.
Моя помощь уже не требуется?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

56 (изменено: Fiiiish, 2012-06-25 20:45:07)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Indomito Спасибо за отзывчивость, Grey уже помог.

57

Re: AHK: Windows 7 - смена устройств воспроизведения звука

   SetKeyDelay, 100, 100   
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,playback",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      WinClose, % "ahk_pid" PID
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

Использую этот вариант от Grey.
Почему-то не всегда срабатывает.
100 раз сработает, а один раз осечка.
Что может быть за причина?
Может SetKeyDelay увеличить?

58

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Malcev я использую свой вариант - работает без осечек.
Правда он отличается немного от исходного на форуме.

;=====Переключение звука===============
;LWin & Tab::
ToggleSound:
   isDevSetTitle:="Переключение звука"
   isDevSet:="Звук на "
   d:="колонки", h:="наушники"
reDevSet:
   Run, mmsys.cpl
   Process, Wait, rundll32.exe, 1
   If (!ErrorLevel)
   {
    Process, Close, rundll32.exe
    MsgBox, 16, % isDevSetTitle, Ошибка, 0   
   }
   else
   {
      WinWait, % "ahk_pid" ErrorLevel
      ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlGet, isEnabled, Enabled,, Button2
      Sleep, 50
      If !isEnabled
         ControlSend, SysListView321, {Down}
      Sleep, 50
      ControlClick, Button2 ; По умол&чанию
      Sleep, 50
      ControlClick, Button4 ; на клик по кнопке ОК
      Process, Close, rundll32.exe
      MsgBox, 1, % isDevSetTitle
             , % isEnabled ? isDevSet . d : isDevSet . h, 5
   }
;Sleep, 1000
IfMsgBox, Cancel 
  Goto, reDevSet
Return
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

59

Re: AHK: Windows 7 - смена устройств воспроизведения звука

2Grey, может поможешь со скриптом. Я использовал предложенный тобой, немного изменен под себя, он выставлял усиление микрофона на 20 Дб.

Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,recording",,, PID
   WinWait, % "ahk_pid" PID,, 1

   If !ErrorLevel
   {
      Send, {Down}
      ControlClick, Button3, ahk_class #32770,,, 2
      Send, {CtrlDown}{Tab 2}{CtrlUp}
      ControlClick, x145 y195, ahk_class #32770,,, Pos...

Но проблема вот в чем, для рядовых пользователей запрещен доступ к control.exe и соотвественно нужно запустить от админа. Возможно ли как то узменить параметры это ползунка используя команду типа:

SoundSet, off, Microphone, mute, 3

60

Re: AHK: Windows 7 - смена устройств воспроизведения звука

У меня Microphone +20dB Boost в виде чекбокса, и вот так получается им манипулировать:

>+NumpadMult::
   SoundSet, (isEnable:=!isEnable) ? False:True, Microphone, ONOFF
   KeyWait, % SubStr(A_ThisHotkey, 3)
   Return

61 (изменено: AlexanderUA, 2013-10-26 22:58:08)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Использовал все коды с этого сайта для переключения звука, но вылазит только окно Звуковых устройств и всё. Дальше даже снова не получается запустить скрипт, приходится его перезагружать чтобы он опять сработал и вылезло одно окно звука. Установлена Windows 7, AutoHotkey 1.0.48.05
Вот например скрипт переключений режима мониторов(клон, расширенный) работает без глюков, хотя там конечно по проще, просто ссылки.
Хотя были моменты я чтото понаклацивал, повыходил по заходил с программы, не сколько раз перезагрузил комп, заработало.
Оставил этот скрипт 

^!V::
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,playback",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      WinClose, % "ahk_pid" PID
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

Пока работает. Но если опять перестанет, где копать дальше?

62 (изменено: Indomito, 2013-10-27 08:48:15)

Re: AHK: Windows 7 - смена устройств воспроизведения звука

AlexanderUA Для начала обнови версию AHK_L, актуальная (1.1.13.01) - может быть в этом дело, кто знает.

Ссылка на скачивание - AHK_L Installer(ANSI x86,  Unicode x86, Unicode x64 and Compiler  and Documentation)

Далее проверь кодировку текстового файла, должна быть UTF-8, так меньше глюков и не срабатываний.

Если всё это не поможет, то надо смотреть/копать глубже.

P.S. UTF-8 нужен для того, что бы верно работал вызов в команде RunDLL

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

63

Re: AHK: Windows 7 - смена устройств воспроизведения звука

#Tab::
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,playback",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      ControlSend, SysListView321, {Down}
      ControlGet, isEnabled, Enabled,, Button2
      ControlSend, SysListView321, % !isEnabled ? "{Down}":""
      ControlClick, Button2, ahk_class #32770,,, 2
      WinClose, % "ahk_pid" PID
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   Return

Может кто-нибудь подсказать, как вариант Грея дополнить так, чтобы при его использовании, окошко со звуковыми устройствами не становилось активным, не выходя поверх окон, не сворачивая игру и т.п ?

64

Re: AHK: Windows 7 - смена устройств воспроизведения звука

Думаю не получится, оно должно быть активным, т.к. идёт нажатие на кнопки окна.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download