Что нового

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

Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
InnI сказал(а):
Ещё раз повторю: уберите из кода отключение редиректа и посмотрите, что будет.

Убрал, на видео видно, что редирект закомментирован, вот ссылка - https://yadi.sk/i/_O7q4Y6_9PLYMA

Вы можете, пожалуйста, я Вас очень прошу, сделать так, из окна с заголовком "Звук" получить порядковый номер строки, в которой написано "Динамики" , это число загнать в переменную, типа $a

Переменную $a загнать сюда Send("^{Down $a}") , где $a - может быть 1, 2 или 5 или любая цифра

Это и будет решение проблемы
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
Это и будет решение проблемы
Какая наивная самоуверенность.

получить порядковый номер строки, в которой написано "Динамики"
Именно это делает та строка кода, после которой у вас ошибка.
Поймите, что, если при обращении к списку происходит вылет, то мы не сможем ни найти текст, ни получить текст пункта или выделения. В лучшем случае узнаем количество пунктов. Пробуйте этот код
Код:
ShellExecute("mmsys.cpl")
WinWaitActive("Звук")

$iCount = ControlListView("Звук", "", "SysListView321", "GetItemCount")
For $i = 0 To $iCount - 1
  If ControlListView("Звук", "", "SysListView321", "GetText", $i) = "Динамики" Then ExitLoop
Next
If $i = $iCount Then Exit MsgBox(262144, "Ошибка", "Пункт 'Динамики' не найден")
Send("{down " & $i + 1 & "}")
ControlClick("Звук", "", "Button3")



Добавлено:
Сообщение автоматически объединено:

SharkyEXE [?]
редирект закомментирован
Комментарии в AutoIt начинаются с символа ; (точка с запятой)
 
Автор
S

SharkyEXE

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

В коде
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
Sleep ( 100000 )
ControlListView("Звук", "", "SysListView321", "Select", $iItem)
ControlSend("Звук", "", "SysListView321", "{space}")

ControlFocus ( "Звук", "", "[CLASS:Button; INSTANCE:3]" )
ControlClick ( "Звук", "", "[CLASS:Button; INSTANCE:3]" )
заменил строки на Ваши
Код:
$iCount = ControlListView("Звук", "", "SysListView321", "GetItemCount")
For $i = 0 To $iCount - 1
  If ControlListView("Звук", "", "SysListView321", "GetText", $i) = "Динамики" Then ExitLoop
Next
If $i = $iCount Then Exit MsgBox(262144, "Ошибка", "Пункт 'Динамики' не найден")
Send("{down " & $i + 1 & "}")
ControlClick("Звук", "", "Button3")

При запуске - ошибка , что и раньше

При таком коде
Код:
$iCount = ControlListView("Звук", "", "SysListView321", "GetItemCount")
$i = ControlListView("Звук", "", "SysListView321", "GetText", $iCount) = "Динамики"
Send("{down " & $i & "}")
ControlClick("Звук", "", "Button3")

ошибки нету, но и строка "Динамики" не запускается

Я Вас очень прошу - сделайте по проще, мягко сказать, "по тупому" код - должно получиться

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

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
Этот код обращается к несуществующему пункту списка, т.е. не работает. Поэтому и ошибки нет.
Я не знаю, как вам объяснить, что у вас проблемы с системой, а не с AutoIt.

Последняя попытка. Но это, как "из пушки по воробьям". UIAutomate. При наличии ошибок в консоле SciTE будут сообщения с префиксом !> _UIA_

Код:
#include <UIAutomate.au3>

ShellExecute("mmsys.cpl")
WinWaitActive("Звук")

$oLV = _UIA_GetElementFromHandle(ControlGetHandle("Звук", "", "SysListView321"))
$oItem = _UIA_GetControlTypeElement($oLV, "UIA_ListItemControlTypeId", "Динамики")
_UIA_ElementMouseClick($oItem, "", Default, Default, 2)
 
Автор
S

SharkyEXE

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

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

InnI сказал(а):
что у вас проблемы с системой, а не с AutoIt.

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

InnI сказал(а):
Последняя попытка.

Огромное Вам спасибо, заработало

Вот рабочий код
Код:
RunWait("control.exe")

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

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

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

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

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

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

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

WinWaitActive ( "Звук", "" )

WinSetOnTop ( "Звук", "", 1 )

#include <UIAutomate.au3>

$oLV = _UIA_GetElementFromHandle(ControlGetHandle("Звук", "", "SysListView321"))
$oItem = _UIA_GetControlTypeElement($oLV, "UIA_ListItemControlTypeId", "Динамики")
_UIA_ElementMouseClick($oItem, "", Default, Default, 2)

WinWaitActive("Свойства: Динамики")

Send("^{tab 2}")
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

PS. Все-же ну вот заело, стандартными способами, без подключения дополнительных библиотек ( UIAutomate ) сделать , чтобы работало

А нельзя сделать другое - найти строку, содержащую слово "Динамики" и вернуть сразу же ее индекс, типа в одну строку, без For , может заработает?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
найти строку, содержащую слово "Динамики" и вернуть сразу же ее индекс
Блин. Ну вот же эта команда, которая ищет и сразу возвращает индекс пункта
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
Но вы утверждаете, что она приводит к ошибке.

стандартными способами, без подключения дополнительных библиотек ( UIAutomate ) сделать , чтобы работало
Установите нормальную Windows и всё заработает.
 
Автор
S

SharkyEXE

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

Да как бы я уже и фото приводил, и видео - ошибка есть, мне нет смысла обманывать, проблем никому создавать нет желания

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

кроме
Код:
$iCount = ControlListView("Звук", "", "SysListView321", "GetItemCount")
For $i = 0 To $iCount - 1
  If ControlListView("Звук", "", "SysListView321", "GetText", $i) = "Динамики" Then ExitLoop
Next

извлечь информацию

Просьба на меня не обижаться, извините...
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
извлечь информацию
Ещё раз поясняю. Именно в извлечении информации по пункту списка и есть проблема.
Чтобы получить информацию по пункту SysListView32 нужно создать структуру, записать её в память чужого процесса, отправить списку специальное сообщение, прочитать структуру из памяти чужого процесса, извлечь данные из структуры. Вот где-то на этапе межпроцессного взаимодействия и происходит ошибка. Поэтому, какую бы информацию по пункту вы не попытались узнать - всегда будет ошибка.


Добавлено:
Сообщение автоматически объединено:

Возможно, на вашей сборке вообще ограничено использование х86 приложений. Попробуйте скомпилировать скрипт под х64 и запустите. Если опять будет ошибка, то, боюсь, уже ничего не поможет.
 
Автор
S

SharkyEXE

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

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

По поводу x64 - мне нужно, чтобы на x86 тоже работал скрипт , поэтому ,к ак я понял , мне только x86 компилировать нужно

По поводу работает с UIAutomate - то , что делает UIAutomate в моем случае - внутрь моего кода никак не запихнуть , пожалуйста , может там 5-10 строк , так проще в мой код добавить , пожалуйста , конечно , если по поводу UIAutomate - там мега глобальная работа , столько строк внутри UIAutomate...

Просто как-то необычно , загадочно , мистика чтоли - как же UIAutomate удалось справиться с тем , с чем стандартные команды выбивают ошибку ;)
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
По поводу работает с UIAutomate
Если вы имеете в виду "вытащить из UDF только те фунции, которые используются в вашем коде", то нет. Это я делать не буду.

как же UIAutomate удалось справиться с тем , с чем стандартные команды выбивают ошибку
Кривые сборки вызывают ошибку, а не стандартные команды.
А IUIAutomation - это просто другая технология доступа к элементам. Но и она может не работать, если не включить в сборку некоторые файлы, не влияющие на работу самой системы.
 
Автор
S

SharkyEXE

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

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

Честное слово , не обижайтесь , я не знал , даже думать страшно , что x86 приложения могут коряво не работать на x64 системах , всегда компилировал x86 Autoit - всегда отлично работало и на х86, и на х64 - первый случай, когда х86 не работает на х64, честное слово

Я вот тут что обнаружил.

1) Компиляция скрипта как x86
Код:
AutoItSetOption ( "WinTitleMatchMode" , 2 )

RunWait("control.exe")

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

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

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

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

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

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

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

WinWaitActive ( "Звук", "" )

WinSetOnTop ( "Звук", "", 1 )

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

WinWaitActive("Свойства: Динамики")

Send("^{tab 2}")
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
Итого - запускается и работает на x86 системе, но запускается и не работает на x64 системе

2) Компиляция скрипта как x64 - все тоже самое , что x86 , только в самом верху добавлена строка
Код:
#AutoIt3Wrapper_UseX64=y
Код:
#AutoIt3Wrapper_UseX64=y

AutoItSetOption ( "WinTitleMatchMode" , 2 )

RunWait("control.exe")

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

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

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

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

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

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

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

WinWaitActive ( "Звук", "" )

WinSetOnTop ( "Звук", "", 1 )

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

WinWaitActive("Свойства: Динамики")

Send("^{tab 2}")
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
Итого - запускается и работает на x64 системе, но не запускается и не работает на x86 системе

Вывод - как мне сделать универсальную версию - x86_x64 , чтобы на x64 отработало как x64 , а на x86 отработало как x86
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
В справке по функции ControlListView сказано:
Примечания
Некоторые команды не выполняются, когда используется 32-разрядный процесс AutoIt с применением к 64-разрядному процессу. Аналогично некоторые команды не выполняются когда используется 64-разрядный процесс AutoIt с применением к 32-разрядному процессу.


Объясняю. Получить доступ к информации о пункте х64-списка может только процесс х64. То же самое для х86. Когда вы вызываете окно "Звук" из панели управления, то запускается rundll32.exe *64, которая вызывает окно "Звук" с х64-списком. Работать с этим списком вы можете только из х64 скрипта. Если бы вы использовали
Код:
ShellExecute("mmsys.cpl")
то система запустила бы ту rundll32.exe, разрядности которой сам скрипт. И с этой строкой скрипт х86 работал бы на обеих системах. Поэтому, при использовании запуска через панель управления нужно два скрипта для каждой разрядности.

А то, что х64 не запускается на х86, то так и должно быть. С этим вы ничего не сделаете.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
InnI сказал(а):
Если бы вы использовали
Код:
ShellExecute("mmsys.cpl")
то система запустила бы ту rundll32.exe, разрядности которой сам скрипт. И с этой строкой скрипт х86 работал бы на обеих системах.

Компиляция скрипта как x86
Код:
AutoItSetOption ( "WinTitleMatchMode" , 2 )

ShellExecute("mmsys.cpl")

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

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

WinWaitActive ( "Звук", "" )

WinSetOnTop ( "Звук", "", 1 )

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

WinWaitActive("Свойства: Динамики")

Send("^{tab 2}")
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
Итого - запускается и работает на x86 системе, но запускается и не показывает вкладку "Дополнительные возможности" на x64 системе
 

Вложения

  • Image00001.jpg
    Image00001.jpg
    192 КБ · Просмотры: 7

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
SharkyEXE [?]
не показывает вкладку "Дополнительные возможности" на x64 системе
А это вам уже в Microsoft обращаться нужно. Здесь я вам не помогу.
 
Автор
S

SharkyEXE

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

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

Пожалуйста, я Вас очень прошу, придумайте костыль, обход, ну неужели в 21м веке, в языке Autoit нельзя добиться универсальности, чтобы и х86, и х64

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

Пожалуйста, интегрируете фишку внутри одного кода, я Вас очень прошу

Тот же самый редирект, который я отключал - где нужно мне, работает 100%но
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Берёте рабочий скрипт, компилируете его под х86 и переименовываете в TurnOff.exe
Этот же скрипт компилируете под х64 и переименовываете в TurnOffx64.exe
В папке с этими двумя exe создаёте новый скрипт следующего содержания
Код:
If @OSArch = "X86" Then
  FileInstall("TurnOff.exe", "*")
  RunWait("TurnOff.exe")
  FileDelete("TurnOff.exe")
Else
  FileInstall("TurnOffx64.exe", "*")
  RunWait("TurnOffx64.exe")
  FileDelete("TurnOffx64.exe")
EndIf
и компилируете этот скрипт под х86. Теперь этот (третий) exe будет содержать в себе оба предыдущих exe и при запуске распакует один из них, запустит и удалит по завершении.
 
Автор
S

SharkyEXE

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

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

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

Пожалуйста, я Вас очень прошу, сделайте поиск вкладки Дополнительные возможности и переключить на нее, т.е. использовать не
Код:
Send("^{tab}")
Send("^{tab}")
а что-то типа того, что используется для поиска строки "Динамики"
Код:
$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
ControlListView("Звук", "", "SysListView321", "Select", $iItem)
ControlSend("Звук", "", "SysListView321", "{space}")
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Код:
; ожидание элемента SysTabControl32
For $i = 0 To 9
  If ControlCommand("Свойства: Динамики", "", "SysTabControl321", "IsVisible") Then ExitLoop
  Sleep(30)
Next

; теперь выбирайте:

; или просто переключение на вкладку справа (2 раза)
ControlCommand("Свойства: Динамики", "", "SysTabControl321", "TabRight")
ControlCommand("Свойства: Динамики", "", "SysTabControl321", "TabRight")

; или поиск по названию и клик по вкладке
#include <GuiTab.au3>
$hTab = ControlGetHandle("Свойства: Динамики", "", "SysTabControl321")
$iTabItem = _GUICtrlTab_FindTab($hTab, "Дополнительные возможности")
If $iTabItem = -1 Then Exit MsgBox(262144, "Ошибка", "Вкладка 'Дополнительные возможности' не найдена")
_GUICtrlTab_ClickTab($hTab, $iTabItem)
 
Верх