Autoit winactivate не работает

XYplorer Beta Club

AutoIt3 WinActivate Not Working?

AutoIt3 WinActivate Not Working?

Post by Enternal » 28 May 2016 09:14

I tested it with class Notepad and some others and they work. Yet for XYplorer, it does not seem to work at all. Just me?

[edit] Odd thing is I do see XYplorer being activated and focused on IF XYplorer is restored. If it’s minimized, then it does nothing.

Re: Autoi3 WinActivate Not Working?

Post by highend » 28 May 2016 09:38

Works fine for me.

What value does $hWnd have when you execute it and does it match the hwnd of XY?

Re: AutoIt3 WinActivate Not Working?

Post by Enternal » 28 May 2016 13:17

Hmm. Very odd. It was working before in the past.

It returned 0x0001038A for the $hWnd. It returned 0x00561620 if I run the script directly from XYplorer.

EDIT: Interestingly, after just sitting there repeatedly running the script out of boredom and tiredness, there was one moment where it actually worked and it actually gave a different $hWnd. Amazing. This seems to be related to a complaint I saw about this function on the Autoit forums about how it’s finick at times for no reason.

On a different computer, it works perfectly with $hWnd 0x00040902.

Even now I’m confused since it worked repeatedly for me before and suddenly stopped working only recently.

Re: AutoIt3 WinActivate Not Working?

Post by SammaySarkar » 28 May 2016 13:36

Re: AutoIt3 WinActivate Not Working?

Post by Enternal » 28 May 2016 13:39

Re: AutoIt3 WinActivate Not Working?

Post by Enternal » 28 May 2016 13:46

Re: AutoIt3 WinActivate Not Working?

Post by SammaySarkar » 28 May 2016 13:53

How are you running it outside of XYplorer?

ed: added a bit of possibly important info to 1st post.

Re: AutoIt3 WinActivate Not Working?

Post by Enternal » 28 May 2016 16:44

How are you running it outside of XYplorer?

ed: added a bit of possibly important info to 1st post.

I simply run it directly from the Desktop through Explorer. Not only that, just a moment ago while writing this post, it worked once again and then stopped working afterwards. Very very weird.

. and I found the issue. So. in the past AutoIt would never tried to activate a program that had no visible window. Why now? The problem was it’s trying to activate Dexpot (oh, this is also written in VB6?!). I mean, AutoHotKey properly ignores it and picked XYplorer instead unlike AutoIt. Well, now I need to find easy ways to ignore it (or have a double check that it uses ThunderRT6FormDC AND it has XYplorer in its title). *sigh*

Источник

Проблема: запуск AutoIT программы в блокированном сеансе Windows

Удивительно, проработав несколько лет мой скрипт AutoIT для автоматизации сборки проекта из MG-SOFT Visual MIB Builder 9 в один день перестал работать и файлы перестали собираться. При активном рабочем столе однако все работало. Также и при подключении по удаленному доступу к рабочему столу — скрипты работают пока окно не свернуто и активно.

Предыстория

MG-SOFT Visual MIB Builder 9 у нас лицензионный потому мы его до сих пор используем для работы, но вот вручную экспортировать готовые MIB и вручную же их проверять это рутинно и скучно, особенно при наличии сервера автоматизации Jenkins.

Я пользуясь привилегией лени над палкой, написал на AutoIT 3 автоматизатор, который кликал куда надо за меня и на вывод кидал бы мне список ошибок, если они есть. Если сборка падает я сразу в письме получаю список ошибок в проекте по каждому файлу.

Чтобы Jenkins мог выполнять задачи в которых задействованы графические приложения я создал удаленный сборщик Jenkins (далее jenkins-gui-win-slave) на этой же машине. На ПК создан отдельный пользователь ci-server в сеансе которого при входе в систему запускается из автостарта скрипт запуска агента Jenkins. Подключается агент через Java WebStart, JNLP. Чтобы jenkins-gui-win-slave стартовал для пользователя ci-server настроен автоматический вход в систему при старте ПК, в автозапуске лежит скрипт запуска jenkins-gui-win-slave, а в планировщике заданий Windows есть задача «при входе» выполнить «скрипт блокировки сеанса пользователя» — это позволяет сразу после входа заблокировать от нежелательных посетителей сервера сеанс ci-server.

В итоге при старте системы происходит автоматический вход для пользователя `ci-server`, запуск агента `jenkins-gui-win-slave`, блокирование сеанса пользователя `ci-server`.

Проблема

Программы при блокировке сеанса Windows помещает приложения в изолированный сеанс Session 0 для обеспечения безопасности, т.к. считается, что активность в графическом приложении во время блокировки должна отсутствовать. Это накладывает ограничения, и часть оконных функций тогда не работает.

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

Решение

Есть два решения: без изменения кода и с изменением кода.

1. Без изменения кода

Установить виртуальную машину, в нее поставить Windows, агент Jenkins и нужное для сборки ПО. Причем для Windows 7 Pro можно использовать легально Windows XP Mode — получаете виртуалку с XP и на ней все гоняете. Или используйте другое ПО для виртуализации, например VirtualBox, туда придется ставить ОС отдельно. Для виртуалки нужно настроить IP адрес, чтобы агент Jenkins мог подключаться к мастер серверу Jenkins. Для XP Mode IP адреса также можно настроить.

В виртуалке можно использовать пользователя по умолчанию.

В виртуалке в папку Автозапуск поместить скрипт командной строки (.bat\.cmd) для запуска агента Jenkins.

Пример скрипт запуска агента Jenkins:

rem Runs jenkins-gui-win-slave to work with GUI builds

«C:\Program Files\Java\jre1.8.0_151\bin\java.exe» -jar «C:\Program Files\Jenkins\war\WEB-INF\slave.jar» -jnlpUrl http:// :8080/computer/jenkins-gui-win-slave/slave-agent.jnlp -secret

:: jenkins-master-addr — адрес MASTER сервера jenkins

:: secret_string — ключ доступа к серверу для агента, см. в настройках агента на сервере Jenkins

Отключить скринсервер, отключить функцию «начитать с блокировки экрана». Настроить автоматический вход для пользователя без пароля при старте системы.

Далее настроить автозапуск виртуалки.

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

2. С изменением кода

Я пошел этим путем, т.к. у меня только одна такая задача была.

Чтобы обойти ограничения режима блокировки, нужно:

  1. отказаться от тех функций, что работают с активными окнами или заменить их на альтернативные.
  2. Отказаться от движения мышью MouseMove, MouseClick и т.п.
  3. Заменять функцию Send на ControlSend или ControlClick.

Примечание: скрипты записанные Au3Record используют как раз функции не работающие в режиме блокировки сеанса.

С приложением работаем так будто бы окна уже активны в момент обращения.

Заменяем:

; Делаем окно активным и жмем кнопку
if (WinActivate($windowName)) Then
; Нажать кнопку в окне
ControlClick($windowName, $buttonName, «»)
EndIf

; Попытаемся сделать активным окно. При блокировке сеанса может не срабатывать, но нам и не важно
WinActivate($windowName)
; Нажимаем кнопку
ControlClick($windowName, $buttonName, «»)
; или ControlSend($windowName, «», $buttonClass, ««)

Лучше дожидаться появления окна через WinWait и после использовать полученный хендл окна для отправки ему сообщений.

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

Источник

AHK: Окно не активируется, команда WinActivate не срабатывает

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 7

1 Тема от Котозух 2010-11-07 00:54:27 (изменено: Котозух, 2010-11-09 10:27:55)

Тема: AHK: Окно не активируется, команда WinActivate не срабатывает

Вот программный код на Ahk

Проблема в следующем:
Этот код создан в Блокноте и сохранен как send.ahk. Я нахожу этот файл и запускаю его клавишей Enter. Далее происходит следующее. 1) Окно Экселя при этом вообще не открывается (хотя он у меня запущен, я его вижу, и диспетчер задач его видит….), оно так и остается за другими окнами либо в свернутом состоянии, поверх них оно не вылезает. 2) В Трее (там где часики) появляется значок «H», причем не просто появляется, а начинает долбиться в этом Трее: появляться и исчезать через каждые доли секунды – и так до тех пор, пока я сам не активирую окно Экселя либо другое активное окно. И как только я это делаю – вывожу на передний план окно Экселя (начинающегося с заголовка «Книга1») – в первой же ячейке Экселя появляется либо полностью выражение «Open_my_Macro», либо остаток этого выражения. Если я активирую вместо Экселя окно, например, Блокнота, то это выражение «Open_my_Macro» записывается в строку открытого окна Блокнота. И send.ahk при этом перестает работать, а значок из Трея исчезает.
Я оставил для проверки только две первые строки кода:

Кроме того, что в Трее появился и исчез значок “H”, ничего не произошло.
В чём дело? Понять не могу?

2 Ответ от ypppu 2010-11-07 01:22:22

  • ypppu
  • Модератор
  • Неактивен
  • Рейтинг : [ 155 | 0 ]

    Re: AHK: Окно не активируется, команда WinActivate не срабатывает

    Вы уверены, что заголовок окна Книга1, а не, например, Microsoft Excel — Книга1? Что показывает AutoIt3 Window Spy?

    Источник

    AutoIt — ControlClick не работает

    Я не знаю, как это сделать, или мне что-то не хватает — может быть, в #include ? на данный момент у меня есть:

    Я проверил с помощью AutoIt v3 WIndow Control, и аргументы внутри ControlClick верны

    Ни одна из последних двух строк не заставляет AutoIt выбрать желаемый вариант. Любая помощь очень ценится.

    4 ответа

    Вероятно, скрипт ждет, когда станет активным окно WinWaitActive ().

    В этом случае вы можете использовать WinActivate перед WinWaitActive, чтобы избежать этой проблемы.

    Если вам нужно более надежное решение, вы можете использовать это:

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

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

    Однако есть более простое решение — установить его в тихом режиме. запустить команду

    Запустите ($ sDrivers & ‘\ vcredist_x86.exe / q’)

    Теперь вам не нужно тыкать в кнопки. Кроме того, лучше не использовать ID, потому что, если вы тестируете приложение, которое меняется, разработчики могут все это изменить. Вместо этого я использую текст кнопки как дополнительный критерий поиска. гораздо более надежен и требует меньше обслуживания в моем коде.

    Вероятно, это не то, что вы ищете, так как он ждет, пока окно не станет активным, для запуска кода. WinActivate () активирует окно. Если вы хотите, чтобы код запускался при активации окна, подойдет WinWaitActive () .

    Также вы можете избежать появления заголовка в ControlClick, сделав это.

    Используйте инструмент Autoit Window Info, чтобы найти классы, если вы его еще не используете. (https://www.autoitscript.com/autoit3/docs/intro/au3spy. htm)

    Если ControlClick по-прежнему не работает, вы можете попробовать использовать

    Источник

    WinActivate не работает в сценарии authotkey

    У меня есть следующий скрипт AutoHotKey, который поможет мне переключаться между различными открытыми приложениями, используя ярлык:

    Проблема в том, что для некоторых приложений она работает только иногда (например, PowerShell и TortoiseHG Workbench), что действительно разочаровывает. Для других приложений (Chrome, Thunderbird) он работает всегда.

    Вот что я нашел до сих пор:

    Если вы явно минимизируете «проблемное» приложение, вы никогда не сможете активировать/максимизировать окно, используя ярлыки AHK. Я не уверен, есть ли другие сценарии, которые препятствуют работе ярлыков, но это один из способов репликации проблемы (по крайней мере для меня).

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

    Я думаю, что проблема не ограничивается AutoHotKey только потому, что я могу реплицировать это поведение только с помощью Диспетчера задач. Если я перейду на вкладку «Приложения», щелкните правой кнопкой мыши на целевом приложении и выберите «Привести на передний план», то же самое произойдет. НО, если я выбираю «Переключиться на», это сработает!

    Итак, я думаю, мой вопрос в том, что именно делает «Задача Manager-> Приложения-> Переключиться на» делать «и есть эквивалент, который я могу использовать в AHK. Моя ОС — Win7.

    Источник

    Читайте также:  Как правильно настроить резак для резки кислородом металла
Оцените статью