Что нового

Отключить все эффекты

SharkyEXE

Новичок
Сообщения
86
Репутация
0
Версия AutoIt: 3.3.14.0

Описание:

Всем здравствуйте.

1) Операционная система: Microsoft Windows 7 Professional Service Pack 1 x64
2) Контроль учетных записей: ВЫКЛючен

После запуска кода тынц
Код:
ShellExecute("mmsys.cpl")
WinWaitActive("Звук")

$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
ControlListView("Звук", "", "SysListView321", "Select", $iItem)
ControlSend("Звук", "", "SysListView321", "{space}")
от уважаемого InnI появляется окно с заголовком Свойства: Динамики

Пожалуйста, помогите, мне нужно

1) в окне с заголовком Свойства: Динамики найти вкладку Дополнительные возможности ( вкладка может быть под любым номером )

2) в окне с заголовком Свойства: Динамики нажать на вкладку Дополнительные возможности

3-1) если установлена птичка/галочка на строке Отключить все эффекты : в окне с заголовком Свойства: Динамики нажать кнопку Отмена

3-2) если не установлена птичка/галочка на строке Отключить все эффекты :
- поставить птичку\галочку в строке Отключить все эффекты
- в окне с заголовком Свойства: Динамики нажать кнопку Применить
- в окне с заголовком Свойства: Динамики нажать кнопку ОК

4) В окне с заголовком Звук нажать кнопку ОК

Спасибо.

Примечания:

Отсутствуют
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
Код:
ShellExecute("mmsys.cpl")
WinWaitActive("Звук")

$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
ControlListView("Звук", "", "SysListView321", "Select", $iItem)
ControlSend("Звук", "", "SysListView321", "{space}")

WinWaitActive("Свойства: Динамики")
Send("^{tab}")
Send("^{tab}")
For $i = 0 To 9
  If ControlCommand("Свойства: Динамики", "", "Отключить все эффекты", "IsEnabled") Then ExitLoop
  Sleep(30)
Next
If $i = 10 Then Exit MsgBox(262144, "Ошибка", "Переключатель 'Отключить все эффекты' не найден")
If ControlCommand("Свойства: Динамики", "", "Отключить все эффекты", "IsChecked") Then
  Send("{esc}")
  WinWaitClose("Свойства: Динамики")
  Send("{esc}")
Else
  ControlClick("Свойства: Динамики", "", "Отключить все эффекты")
  Send("{enter}")
  WinWaitClose("Свойства: Динамики")
  Send("{enter}")
EndIf
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Ваш код почему-то не сработал , птичка не установилась, выдалось сообщение
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
Посмотрите информацию в Au3Info. Вероятно, в названии присутствует амперсанд: "Откл&ючить все эффекты". Если так, то поправьте все названия в скрипте. Просто у меня эта опция называется по другому. Или замените название на ClassnameNN ("Button1" или что там у вас).
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Прилагаю картинки, как определяется строка Отключить все эффекты в программе Autoit Windows Info

Лично я всегда был, остаюсь и буду за максимальную универсальность

Пожалуйста, я Вас очень прошу, сделайте так сказать "поиск по всем фронтам" строки Отключить все эффекты - например у Вас работает Отключить все эффекты , у меня 100%но работает Откл&ючить все эффекты , я Вас очень прошу

Спасибо.
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
У меня -> у вас:
- название вкладки: "Улучшения" -> "Дополнительные возможности"
- текст переключателя: "Отключение всех звуковых эффектов" -> "Откл&ючить все эффекты"
- ClassnameNN переключателя: "Button1" -> "Button2"

А ещё у меня есть переключатель "Button2" с текстом "Неотложный режим", которого у вас нет.
Поэтому сделать универсально довольно проблематично.
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Немного знаком с условиями, а нельзя никак сделать по простому

If
ControlCommand("Свойства: Динамики", "", "Отключить все эффекты", "IsEnabled")
OR
ControlCommand("Свойства: Динамики", "", "Откл&ючить все эффекты", "IsEnabled")

ControlClick("Свойства: Динамики", "", "Отключить все эффекты")
OR
ControlClick("Свойства: Динамики", "", "Откл&ючить все эффекты")

Конечно, Вы это сделаете красиво
 

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
SharkyEXE [?]
а нельзя никак сделать по простому
Можно. Но это будет персонально для вас и для меня, а не универсально для всех.
К тому же мне это не надо, а для вас я сделал. Следовательно, усложнение кода бессмысленно.
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

В общем, при тестировании , при запуске , команда
Код:
ShellExecute("mmsys.cpl")

на некоторых системах у меня появляется ошибка

Однако, если запустить окно с заголовком "Звук":
1) через "Пуск" - "Панель управления "- нажать на кнопку "Звук"
или
2) запустить вручную, двойной клик левой кнопкой мышки по ярлыку Upravlenie_zvukovymi_ustrojstvami.lnk

то ошибки нету

Пожалуйста, я Вас очень прошу, напишите, как сделать
1) через "Пуск" - "Панель управления "- нажать на кнопку "Звук"
или
2) запустить вручную, двойной клик левой кнопкой мышки по ярлыку Upravlenie_zvukovymi_ustrojstvami.lnk

Для моего немного развития в Autoit хотелось бы увидеть оба способа , я Вас прошу

Спасибо.
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
SharkyEXE [?]
на некоторых системах у меня появляется ошибка
Уберите отключение редиректа, скомпилируйте, как х86 и будет работать на любой системе.

Имитация запуска через ярлык
Код:
Run("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl")
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Уберите отключение редиректа, скомпилируйте, как х86 и будет работать на любой системе.

У меня х64 система , в общем, я даже не компилирую, тупо запускаю на выполнение - F5 - у меня ошибка

В общем, у меня сборка, может из-за этого

С Вашей строкой
Код:
Run("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl")

тоже ошибка

Тут больше 100%но сделать
) через "Пуск" - "Панель управления "- нажать на кнопку "Звук"
или
2) запустить вручную, двойной клик левой кнопкой мышки по ярлыку Upravlenie_zvukovymi_ustrojstvami.lnk

тогда точно будет работать, я уже пробовал, вручную эти оба способа ошибку не выдают
 

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
Попробуйте через полный путь к ярлыку
Код:
ShellExecute(@DesktopDir & "\Upravlenie_zvukovymi_ustrojstvami.lnk") ; ярлык на рабочем столе пользователя
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Попробуйте через полный путь к ярлыку

То же ошибка

Повторюсь, оба способа, что я описал - вручную работают 100%но , другой вопрос, можно или нельзя их сделать на AutoIt
 

joiner

Модератор
Локальный модератор
Сообщения
3 062
Репутация
513
у меня при запуске кода как х86 вообще нет вкладки дополнительных режимов. а если запускаю код как х64, то вкладка есть. НО! там все на аглицком. поэтому универсально сделать сложно
система win 10 x64
но в общем, код от InnI отрабатывается без ошибок.
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI , joiner

Здравствуйте.

Под себя подогнал - рабоатет как часы

Код:
If @OSArch = "X86" Then

RunWait("control.exe")

EndIf

If @OSArch = "X64" Then

# http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&start=2560#11

$tValue = DllStructCreate ( "dword" )

# Отключить редирект System32 -> SysWOW64
DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", DllStructGetPtr($tValue))

RunWait("control.exe")

# Включить редирект System32 -> SysWOW64
DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "ptr", DllStructGetPtr($tValue))

EndIf

# Ожидаем появления окна с заголовком " Панель управления "
WinWait ( "Панель управления", "" )

# Активируем окно с заголовком " Панель управления "
WinActivate ( "Панель управления", "" )

WinWaitActive ( "Панель управления", "" )

WinSetOnTop ( "Панель управления", "", 1 )

ControlSend("", "", "[CLASS:DirectUIHWND; INSTANCE:2]", "Звук")
ControlSend("", "", "[CLASS:DirectUIHWND; INSTANCE:2]", "^{Enter}")

WinWaitActive("Звук")

Send("^{Down 3}")

ControlFocus ( "Звук", "", "[CLASS:Button; INSTANCE:3]" )
ControlClick ( "Звук", "", "[CLASS:Button; INSTANCE:3]" )

WinWaitActive("Свойства: Динамики")
Send("^{tab}")
Send("^{tab}")
For $i = 0 To 9
  If ControlCommand("Свойства: Динамики", "", "Откл&ючить все эффекты", "IsEnabled") Then ExitLoop
  Sleep(30)
Next
If $i = 10 Then Exit MsgBox(262144, "Ошибка", "Переключатель 'Отключить все эффекты' не найден")
If ControlCommand("Свойства: Динамики", "", "Откл&ючить все эффекты", "IsChecked") Then
# В окне с заголовком " Свойства: Динамики " нажать кнопку " Отмена "
  ControlFocus ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:15]" )
  ControlClick ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:15]" )
  WinWaitClose("Свойства: Динамики")
# В окне с заголовком " Звук " нажать кнопку " Отмена "
  ControlFocus ( "Звук", "", "[CLASS:Button; INSTANCE:5]" )
  ControlClick ( "Звук", "", "[CLASS:Button; INSTANCE:5]" )
# Закрыть окно с заголовком " Панель управления "
  WinClose("Панель управления")
Else
# Поставить птичку/галочку " Отключить все эффекты "
  ControlClick("Свойства: Динамики", "", "Откл&ючить все эффекты")
# В окне с заголовком " Свойства: Динамики " нажать кнопку " Применить "
  ControlFocus ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:16]" )
  ControlClick ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:16]" )
# В окне с заголовком " Свойства: Динамики " нажать кнопку " ОК "
  ControlFocus ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:14]" )
  ControlClick ( "Свойства: Динамики", "", "[CLASS:Button; INSTANCE:14]" )
  WinWaitClose("Свойства: Динамики")
# В окне с заголовком " Звук " нажать кнопку " ОК "
  ControlFocus ( "Звук", "", "[CLASS:Button; INSTANCE:4]" )
  ControlClick ( "Звук", "", "[CLASS:Button; INSTANCE:4]" )
# Закрыть окно с заголовком " Панель управления "
  WinClose("Панель управления")
EndIf


У меня к Вам просьба - сделайте, пожалуйста, грамотно, чтобы при запуске окна с загловком "Звук" , чтобы строка "Динамики" искалась, на нее ставилось выделение - синяя строка - см. картинку к этому моему сообщению

А так у меня по тупому Send("^{Down 3}") - строка "Динамики" может быть и 1й сверху вниз, и 5й сверху вниз
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
SharkyEXE [?]
чтобы строка "Динамики" искалась, на нее ставилось выделение
Вы издеваетесь?! Мы с этого начали ещё в той теме. А в этой продублировали в первом же скрипте. Посмотрите собственный спойлер в описании темы.
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI

Здравствуйте.

Вы извините меня, пожалуйста, может быть я не не так выразил мысль

Я здесь поглубже проверил, ошибка у меня выдается сразу же после строки
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")


То есть до строки
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")

ошибки нету , после отработки строки
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")

ошибка

Поэтому я очнеь Вас прошу - можете , пожалуйста, другой алгоритм выделения придумать, очень надо

Повторюсь , Send("^{Down 3}") - строка "Динамики" может быть и 1й сверху вниз, и 5й сверху вниз

А мне хочется по другому поиск строки "Динамики" , выделить эту строку - типа один раз на эту строку нажать левой кнопкой мышки - будет синее выделение или еще как-то
 

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
SharkyEXE [?]
после отработки строки ошибка
Какая ошибка? И как вы определили, что именно после этой строки?
После этой строки идёт строка нажатия пробела. Может, всё-таки, после нажатия пробела ошибка?
 
Автор
S

SharkyEXE

Новичок
Сообщения
86
Репутация
0
InnI сказал(а):
Какая ошибка? И как вы определили, что именно после этой строки?
После этой строки идёт строка нажатия пробела. Может, всё-таки, после нажатия пробела ошибка?
После строки
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")

вставил строку
Код:
Sleep ( 100000 )


Запустил скрипт - F5 , появилось окно с заголовком "Звук" и сразу же ошибка - прикрепил картинку к этому сообщению.

Нет желания никогда никому создавать проблемы, вот видео - https://yadi.sk/i/_mItqoAZVeS16A
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 249
Репутация
1 130
Ещё раз повторю: уберите из кода отключение редиректа и посмотрите, что будет.
 
Верх