Что нового

[Окна, Диалоги] Как правильно считать имена окон, закладок и элементов списка?

akoulev

Новичок
Сообщения
169
Репутация
2
Есть вполне себе рабочий скрипт, переключающий вывод аудиосигнала компьютера или "на колонки" , или "на наушники". Вот он:

Код:
#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() — которая бы определяла, как называется текущий элемент ниспадающего списка.
 
Верх