Есть вполне себе рабочий скрипт, переключающий вывод аудиосигнала компьютера или "на колонки" , или "на наушники". Вот он:
Но, понятно, что "это не жизнь": скрипт бодро пашет, "не отдавая себе отчёта", с чем именно он взаимодействует. Подскажите, пож., как написать функцию "Opredelator", которая бы определяла, в каком окне мы находимся, как называется текущая закладка и как называется текущий элемент ниспадающего списка? Сам я поэкспериментировал, — но, похоже, только запутался. Спасибо.
Да, видимо, тут нужны Opredelator1() — которая бы определяла, в каком окне мы находимся;
Opredelator2() — которая бы определяла, как называется текущая закладка;
Opredelator3() — которая бы определяла, как называется текущий элемент ниспадающего списка.
Код:
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Переключатель источника аудиосигнала: "на колонки" <=> "на наушники".
!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Доработать в части определения: что, в итоге, выставлено! ( Func Opedelator() ) — через Controls? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
EnvUpdate ( )
HotKeySet("{ESC}", "Terminate")
Opt("TrayIconDebug", 1); Отладко-режим - в трее смотрим: в какой сроке "зависло"?
BlockInput(1)
$Finik = 0
$NamScr="Switch_Sound_Source"; Switch_Sound_Source
If WinExists("Панель управления") Then
$Finik = 1
WinClose ("Панель управления")
Fini();сменить на restart()
Else
;них
EndIf
$File_Way = @WindowsDir
BlockInput(0)
ShellExecute($File_Way & "\system32\control.exe")
WinActivate ("Панель управления")
WinWaitActive("Панель управления")
WinSetState ("Панель управления", "", @SW_MAXIMIZE );
Send("{Down 12}"); Спуск на иконку с динамиком: "Звуки и аудиоустройства"
Send("{ENTER}");Запуск: "Звуки и аудиоустройства"
WinActivate ("Свойства: Звуки и аудиоустройства")
WinWaitActive("Свойства: Звуки и аудиоустройства")
Send("^{TAB 2}"); переход на правильную закладку: "Аудио".
;НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО ЗАКЛАДКА ИМЕННО "Аудио".;***************************************************************************************************************************
;Exit
Sleep(1111)
;WinActivate ("Свойства: Звуки и аудиоустройства")
;WinWaitActive("Свойства: Звуки и аудиоустройства")
;Opedelator(); Определяет: что, вначале, было выставлено
Send("{Down}"); Главное действо — переключение типа источника аудио-сигнала!
Opredelator(); Определяет: что, в итоге, выставлено
Send("{TAB 11}");
Sleep(1111)
Send("{space}"); "Применить"
;Exit
Sleep(1111)
;Send("+{TAB 2}");
Send("{TAB 9}"); Спуск на "Ok".
Exit
Send("{space}")
WinClose ("Панель управления")
;Exit
Fini()
#cs ----------------------------------------------------------------------------
Список функций:
Opredelator(); — Определяет: что, в итоге, выставлено
Terminate(); — Аварийный выход.
Fini(); — Завершение работы.
#ce ----------------------------------------------------------------------------
Func Fini()
If $Finik = 1 Then
BlockInput(0)
MsgBox(4096, "", "Аварийный выход - а Вы сами этого попросили! :-P", 1.7)
BlockInput(1)
Send("{ENTER}")
Else
;Них.
EndIf
BlockInput(0)
;BlockInput(1)
BlockInput(0); Пусть уж будет, на всяк. случай!
MsgBox(0, "Статус:", "Скрипт """ & $NamScr& """ свою работу завершил.", 3)
;BlockInput(0); Перенесено в MsgBox "Проверяйте работу".
Opt("TrayIconDebug", 0);**********************************************************************************************************************
EnvUpdate ( )
Exit
EndFunc
Func Opredelator()
; — Controls
;ControlGetText(
;Run("notepad.exe")
;MouseClick("left",1676, 904, 1)
;Sleep(111)
;Send("555")
;$var = ControlGetText("[CLASS:Notepad]", "", "Edit1")
;$var = ControlGetText("[CLASS:Notepad]", "", "Edit1")
;$var = ControlGetText("[CLASS:Notepad]", "", "Edit")
; $var = ControlCommand("[CLASS:Notepad]", "", "Edit1", "GetLineCount", "");вернуло "1" без "".
;MsgBox( 0, "$var", $var & "\system32\progman.exe", 7 )
EndFunc
Func Terminate()
;Exit 0
$Finik = 1
Fini()
;ExitLoop
EndFunc
Но, понятно, что "это не жизнь": скрипт бодро пашет, "не отдавая себе отчёта", с чем именно он взаимодействует. Подскажите, пож., как написать функцию "Opredelator", которая бы определяла, в каком окне мы находимся, как называется текущая закладка и как называется текущий элемент ниспадающего списка? Сам я поэкспериментировал, — но, похоже, только запутался. Спасибо.
Да, видимо, тут нужны Opredelator1() — которая бы определяла, в каком окне мы находимся;
Opredelator2() — которая бы определяла, как называется текущая закладка;
Opredelator3() — которая бы определяла, как называется текущий элемент ниспадающего списка.