Что нового

Автоматизация Запустить утилиту,перейти в нужную вкладку,поставить галочку, закрыть

Bazhen

Новичок
Сообщения
6
Репутация
0
Всем доброго времени суток.
Имею некое Рабочее ПО. Имею комп с сенсорным экраном.
Для корректной работы ПО требуется наличие галочки в утилите сенсорного экрана.
И все бы ничего, если бы данная галочка после каждой перезагрузки не снималась.
То есть, после перезапуска компа у меня мое ПО стартует автоматом, НО чтобы все работало надо:
1. Знать что перезагрузка была
2. Иметь под рукой комп для удаленки
3. Иметь время и тд

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

Так вот, суть такова:
1. Запустить утилиту с правами админа после загрузки компа
2. В утилите перейти в нужную вкладку
3. Поставить галочку в нужном месте(там она не спрятана)
4. Закрыть программу

Я далек от кодов и даже терминов которые здесь обсуждают... Хотя с компами общаюсь на уровне выше среднестатистического пользователя.
Скачал прогу. "Запустил" блокнот, написал пару слов, закрыл отказавшись от сохранения...
Потом решил запустить прогу и перейти в нужную мне вкладку и тут что то пошло не так!

Я пока не понимаю логику работы программы в целом и уж тем более отдельных ее функций((
Полез в справочники, а там в каждой функции еще куча не понятных слов и параметров)))) Типо CLASS, Дискрипторы и тд!!!!
Понял что не везде работает утилита распознавания кнопок и даже там где работает (вроде бы) нажатия не происходит и ошибки вроде нет...
В общем привожу пример примитивного кодика по запуску проги и переходу в нужную мне вкладку...
Подскажите, что я делаю не так: не правильно использую команды, выбрал не верный подход, почему нет клика? Или если он есть, то почему физически я его не вижу, а окно всплывает...
Сорри за трактат))) И спасибо всем отозвавшимся.
Прикол в том, что данные трюки меня зацепили, хотелось бы разобраться с программой... Но базовых знаний нет от слова СОВСЕМ(((

Код:
run("C:\Program Files\CCleaner\CCleaner64.exe") ; Запуск CCleaner

$hWnd = WinWait("CCleaner - БЕСПЛАТНО ДЛЯ ДОМАШНЕГО ИСПОЛЬЗОВАНИЯ","",5)
If not $hWnd Then
   MsgBox(4096,"Сообщение","Окно не найдено")
Exit
EndIf
If WinActivate("CCleaner - БЕСПЛАТНО ДЛЯ ДОМАШНЕГО ИСПОЛЬЗОВАНИЯ","") Then
   MsgBox(4096,"Сообщение","УДАЧА!Окно активно")
Else
   MsgBox(4096,"Сообщение","Провал!Окно не наше")
   Exit
EndIf
IF ControlClick("CCleaner - БЕСПЛАТНО ДЛЯ ДОМАШНЕГО ИСПОЛЬЗОВАНИЯ","","[CLASS:Button; ID:1002]") Then ;Нажатие кнопки "Инструменты"
    MsgBox(4096,"Сообщение","Ну и где нажатие???")
 Else
    MsgBox(4096,"Сообщение","Что происходит????")
   Exit
EndIf

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

Теперь поясню еще кое что)) Строку 3 писал не я... Понятия не имею что там написано))) Но идея с окном помогла(возможно ошибаюсь) отследить ВИДИТ прога окно или нет! Не понимаю как в AutoIT понять выполнена ли команда!
Строка 14. Исходя из логики с сообщениями, если КЛИКА не будет, то есть команда не выполнится, то я должен увидеть сообщение "Что происходит???", но выходит сообщение "Ну и где нажатие???", следовательно команда сработала... Но я не во вкладке((((
Взрыв мозга))) Установил утилиту для распознавания Control Viewer, русифицировал ее, но воз и ныне там(((
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Не понимаю как в AutoIT понять выполнена ли команда!
По тому, что возвращает функция либо по состоянию флага ошибки @error после выполнения функции
Например , если посмотреть описание функции ControlClick , то увидим, что в случае удачного выполнения она возвращает 1, при ошибке - 0
 

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
В описании функций, например :Безымянный.jpg
 
Последнее редактирование:
Автор
B

Bazhen

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

Вложения

  • Скрин.png
    Скрин.png
    51.9 КБ · Просмотры: 9

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Если применительно к этой функции. то она флаг ошибки не меняет, а в зависимости от результата возвращает "0" при ошибке и "1" при успешном выполнении, вот и контролируйте это,как в примере выше
Код:
IF ControlClick ("CCleaner - БЕСПЛАТНО ДЛЯ ДОМАШНЕГО ИСПОЛЬЗОВАНИЯ","","[CLASS:Button; ID:1002]") Then ;Нажатие кнопки "Инструменты"
  MsgBox (4096,"Сообщение","Ну и где нажатие???")
Else
    MsgBox(4096,"Сообщение","Что происходит????")
   Exit
EndIf
 
Последнее редактирование:
Автор
B

Bazhen

Новичок
Сообщения
6
Репутация
0
вот и контролируйте это,как в примере выше
Вы меня простите за тупость))) Но я вам задаю прямой вопрос, ГДЕ КОНТРОЛИРОВАТЬ????? Где смотрят данные возвраты???? Где ФИЗИЧЕСКИ смотреть эти возвраты??? Я вам прислал скрин экрана. Я там нигде не вижу ход выполнения скрипта, возвраты (как вы их называете) от команд... Где смотреть эти "0" и "1"
Сообщение автоматически объединено:

Скрипт сделал. Пара запусков компа никаких проблем не выявила, буду наблюдать.
Но выявил пару не понятных моментов((
1.При наведении лупой на элементы окна САМО ОКНО как бы становится не активным... Например в блокноте из за этого не могу "срисовать" кнопку "ФАЙЛ"...
2. Рабочий скрипт ведет себя по разному с разными прогами. Вот странный финт, помогите разобраться)))
Код:
run('notepad.exe')

sleep(2000)

If WinExists("Безымянный – Блокнот") Then
    MsgBox(4096, "", "Окно существует")
Else
    MsgBox(4096, "", "Окно не существует")
EndIf

WinWaitActive('Безымянный – Блокнот')

sleep(1000)

send("{ALTDOWN}{F4}{ALTUP}")


Вот с блокнотом команда SEND отрабатывает на Ура)))

А вот если я в запуск ставлю CCleaner(на нем тренил открытие вкладок), то вылазит сообщение "Окно существует" и все))) Программа не закрывается...
То есть, игнорятся кнопки ALT F4(да и любые другие).
Экспериментировал с переключением раскладки языка, TAB итд.
Почему то после запуска программы команда SEND не работает! Именно поэтому я не мог ранее воспользоваться TAB-ом при запуске программы!

Если я запускаю сам руками прогу и после запуска нажимаю на клаве TAB или переключаю языки или нажимаю Alt+и(горячие клавиши открытия нужной вкладки), то все работает!!!

В чем прикол то?????
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Лучше (надёжнее) использовать вместо send функцию ControlSend, в таком случае Вы будете уверены, что посылаете символы именно в то окно, что нужно, а не в любое активное.
Для эмуляции "Alt" лучше делать так:
Код:
send("{ALTDOWN}{F4}{ALTUP}"); Так не нужно
;для эмуляции Alt (с F4 или любой другой клавишей) лучше делать так:
send("^{F4}")

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

ГДЕ КОНТРОЛИРОВАТЬ????? Где смотрят данные возвраты???? Где ФИЗИЧЕСКИ смотреть эти возвраты???
Я прям затрудняюсь ответить, не потому, что сложно, а потому что это вреде бы как очевидные вещи, самые основы любого языка программирования...
Вы уже используете то, что возвращает функция, посмотрите, свой же пример,
Код:
;Функция WinExists вернёт "1"(True) , если окно существует и "0"(False), если нет,
If WinExists("Безымянный – Блокнот") Then
    MsgBox(4096, "", "Окно существует")
Else
    MsgBox(4096, "", "Окно не существует")
EndIf

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

То есть, игнорятся кнопки ALT F4(да и любые другие).
Да , не со всеми программами это будет работать
 
Последнее редактирование:
Автор
B

Bazhen

Новичок
Сообщения
6
Репутация
0
Лучше (надёжнее) использовать вместо send функцию ControlSend, в таком случае Вы будете уверены, что посылаете символы именно в то окно, что нужно, а не в любое активное.
Для эмуляции "Alt" лучше делать так:
Код:
send("{ALTDOWN}{F4}{ALTUP}"); Так не нужно
;для эмуляции Alt (с F4 или любой другой клавишей) лучше делать так:
send("^{F4}")

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

Да, я так делал, но когда программа не отвечала, я решил железобетонное нажатие сделать))) Спасибо!
Сообщение автоматически объединено:

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

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

Вы поймите, я с программированием ДАЖЕ рядом не ходил! Я просто скачал прогу чтобы закрыть свою мелкую потребность)))
И я не так себе представлял это... Я думал, в нижнем окне(где таймер исполнения и ошибки) есть некая инфа по возврату ответов команд...
Но я все равно вас не понимаю((

Получается, что я должен использовать команды IF и ELSE чтобы отследить возвраты?

А почему тогда в описании команд пишут "ВОЗВРАЩАЕТ "1" если команда выполнена"?????
Символ "1" это не цифра, а некое понятие???
Я в данном случае вывел сообщение, чтобы понять исполнена она или нет...
Так вот, когда мне говорят "КОМАНДА ВОЗВРАЩАЕТ "1"", я хочу спросить, куда возвращает? Где своими глазками необразованными я должен глянуть в какой строке команда и выполнена ли она?)))
Сообщение автоматически объединено:

Да , не со всеми программами это будет работать
Как решают эту проблему?
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Символ "1" это не цифра, а некое понятие???
В данном случае - да "0" или пустая строка = False , то есть "ложь"
"1" или что либо кроме "0" или пустой строки = True, то есть "истина"
Но в Вашем случае, (специально установил для опытов CCleaner) при выполнении функции "ControlClick" возвращается "1" , хотя нажатия на кнопку и не происходит. CCleaner не даёт с ним работать таким образом.
Сообщение автоматически объединено:

Есть библиотека "UIAutomate" , автор Inni , в архиве с библиотекой есть утилиты "Inspect_W10.exe" и "Inspect_W7.exe" , попробуйте - будут ли они что то возвращать из Вашего ПО ?
 

Вложения

  • UIAutomate.zip
    192.3 КБ · Просмотры: 1
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,516
Репутация
1,232
В начало скрипта добавьте
Код:
#RequireAdmin
 
Автор
B

Bazhen

Новичок
Сообщения
6
Репутация
0
В начало скрипта добавьте
Код:
#RequireAdmin
Спасибо, попробую.
А что это?))) Комп не сгорит?)))))
Сообщение автоматически объединено:

Есть библиотека "UIAutomate" , автор Inni , в архиве с библиотекой есть утилиты "Inspect_W10.exe" и "Inspect_W7.exe" , попробуйте - будут ли они что то возвращать из Вашего ПО ?

Спасибо, чуть позже попробую...
 
Верх