Автоматический запуск и заблокированный экран

#windows #automation #autoit

#Windows #автоматизация #автоматический запуск

Вопрос:

У меня есть проприетарное программное обеспечение, которое я использую для загрузки некоторых конфиденциальных данных из Интернета, это программное обеспечение — единственный способ получить доступ к этим данным.

Программное обеспечение открывается с экраном, а затем я должен нажать «загрузить», и загрузка начнется. Я хотел бы загружать эти данные поздно ночью (скажем, в 02:00) каждую ночь. Недостатком было то, что мне приходилось сидеть перед ноутбуком, чтобы «нажать» на кнопку загрузки.

Итак, я написал скрипт автоматического запуска, чтобы открыть программу, подождать 30 секунд, чтобы программа завершила процедуру инициализации, а затем «перейти» к определенному местоположению (координатам) на экране и выполнить «щелчок мышью ()». Затем я создал «запланированную задачу» с помощью планировщика задач Windows, чтобы запустить этот исполняемый файл autoit в 02:00. Все работает нормально, как и ожидалось.

Исполняемый файл Autoit хорошо запускается, когда пользователь «активен». Но если пользователь «заблокирован» (т. Е. экран блокировки), то он застревает в «WinActivate ()», ожидая, пока пользователь станет «Активным», и возобновляется оттуда после того, как пользователь станет «активным». Это означает, что ноутбук должен находиться в разблокированном режиме всю ночь, что нежелательно по соображениям безопасности. Затем я узнал, что могу использовать «ControlClick ()», чтобы сделать то же самое, когда экран заблокирован.

Моя проблема сейчас в том, что когда я использую инструмент информации о окне AutoIt, он не показывает КЛАСС или какую-либо информацию, связанную с кнопкой загрузки, при наведении курсора мыши на кнопку загрузки. Итак, может быть, экран представляет собой флэш-экран или что-то еще, что было намеренно сделано, чтобы убедиться, что КЛАСС button не был замечен!

Можно было бы сделать снимок экрана, найти местоположение, а затем отправить координаты в Mouseclick (), но это может стать намного сложнее, учитывая разное разрешение экрана на разных компьютерах (в случае, если это будет перенесено на другой компьютер и т.д. и т.п.)

Есть предложения и решения?

Комментарии:

1. Графический интерфейс Windows ведет себя неустойчиво, когда рабочая станция заблокирована. Возможно, вы могли бы запустить программное обеспечение на виртуальной машине, чтобы заблокировать только физический компьютер, а не виртуальный?

2. @HarryJohnston, я не подумал о виртуальных машинах. Я попробую это. Будут ли сценарии автоматического запуска без проблем работать на виртуальных машинах?

3. Некоторые продукты виртуализации могут неявно блокировать виртуальную рабочую станцию, если вы закроете виртуальную консоль. Но в остальном никаких проблем быть не должно.

4. Попробуйте программу-шпион, которая поставляется с этой библиотекой autoitscript.com/forum/topic/… Если вы видите элементы управления с помощью этого, вам придется использовать эту библиотеку для автоматизации окна. У меня было много окон, которые я не мог автоматизировать с помощью AutoIt, но они отлично работали, когда я использовал эту библиотеку. Если это сработает, дайте мне знать, и я добавлю этот комментарий в качестве ответа.

5. @JosvanEgmond, попробую, но я подозреваю, что экран моего приложения работает на flash, и «увидеть элементы управления» непросто. Я вернусь к этому вопросу / комментарию через 2-3 недели и обязательно буду информировать о его ходе.

Ответ №1:

WinActivate () будет ждать, пока пользователь активируется, чтобы активировать окно, а затем вернется, и в данном случае это блокирующая функция, поэтому избегайте ее. Держите ваше приложение VB в фоновом режиме, не сворачивайте и удалите функцию WinActivate (). Для ControlClick не обязательно, чтобы окно было активным.

Это должно работать с правильным именем дескриптора и именем класса:

 HotKeySet("!{s}", "_exit")
Local $count = 0
Local $handle

While $count < 3
    Sleep(5000)
    $handle = ControlGetHandle("name", "", "[CLASS:ThunderRT6FormDC]")   ;add name as well if there is one
    If $handle Then     ;check if handle exists
        ConsoleWrite("Handle exists" amp; @LF)
        ControlClick($handle, "", "[CLASS:Classhere]", "left", 1, 191, 115)   ;add a class if exists
    EndIf
    ConsoleWrite("Try: "  amp; $count amp; " times" amp; @LF)
    $count  = 1
WEnd

Func _exit()
    ConsoleWrite("Exiting!" amp; @LF amp; "Tried: " amp; $count amp; @LF)
    Exit
EndFunc
  

Информации, которую вы предоставили мне из информационного инструмента autoit, недостаточно. Используйте какой-либо другой инструмент для получения дополнительной информации.
Spy — отличный инструмент. Попробуйте и вернитесь с дополнительной информацией об имени дескриптора Windows и классах.

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

Редактировать: Добавлен Tesseract OCR UDF:http://www.autoitscript.com/forum/topic/89542-tesseract-screen-ocr-udf /

Комментарии:

1. Если вы внимательно прочитали мой вопрос, я обращаю внимание на тот факт, что щелчок мышью () с использованием «coords» работает нормально. Проблема заключается в том, что «щелчок мышью ()» не работает с «заблокированным» экраном, а класс кнопки не виден для использования «ControlClick()»

2. Отображается ли название окна при блокировке? Тогда вам нужно предоставить больше информации. Опубликуйте вывод информационного средства автоматического запуска. Существуют тысячи способов обработать конкретное окно и сохранить его в скрипте. Сработало бы даже чтение в памяти. Предоставьте больше информации об окне, и, возможно, кто-нибудь сможет вам больше помочь.

3. Отображается ли название окна при блокировке? Я не знаю, как просмотреть инструмент WinInfo, когда моя система «заблокирована». Если вы можете сообщить мне о способе, как это сделать, это будет полезно.

4. Ниже приведен мой вывод WinInfo >>>> Window <<<< Title: XXXX Class: ThunderRT6FormDC Position: 77, 48 Size: 753, 584 Style: 0x16CA0000 ExStyle: 0x00040100 Handle: 0x00070222 >>>> Control <<<< Class: Instance: ClassnameNN: Name: Advanced (Class): ID: Text: Position: Size: ControlClick Coords: Style: ExStyle: Handle: >>>> Mouse <<<< Position: 558, 314 Cursor ID: 2 Color: 0x2A3847 >>>> StatusBar <<<< >>>> ToolsBar <<<< >>>> Visible Text <<<< >>>> Hidden Text <<<< X

5. И другим вариантом является этот UDF: autoitscript.com/forum/topic/89542-tesseract-screen-ocr-udf Вторым вариантом является этот UDF : autoitscript.com/forum/topic/… Но я не могу знать, будут ли они работать с заблокированным ПК. Вам придется попробовать это самостоятельно. Тессеракт — самый простой способ.