Используйте AutoIt с Java-приложениями

AutoIt, кажется, перестает работать, когда фокус отдается Java-приложению.

Для этого кода:

MouseMove(61, 121, 10);
WinActivate("Main @ paperMoney [build 1800.20]");
MsgBox(0, "got it", "got it");

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

Для этого кода:

WinActivate("Main @ paperMoney [build 1800.20]");
MouseMove(61, 121, 10);
MsgBox(0, "got it", "got it");

Результаты → Java-приложение получает фокус, мышь НЕ двигается и появляется сообщение.

Есть ли что-нибудь, что я могу сделать, чтобы команды мыши и клавиатуры работали после того, как java-приложение имеет фокус?


person bboyle1234    schedule 13.03.2011    source источник
comment
Я предполагаю, что это потому, что AutoIt не позволяет использовать несколько потоков, но я не уверен в этом на 100%. Вы получаете сообщения об ошибках? В основном я использовал AutoIt наоборот: я создаю небольшие сценарии AutoIt, которые вызываются из моего графического интерфейса Java Swing, чтобы позволить Java более тесно взаимодействовать с ОС Windows — в основном для управления другим сторонним приложением, компьютеризированной медицинской картой. приложение. Рассмотрите возможность создания очень маленького скрипта AutoIt и очень маленькой Java-программы, которые взаимодействуют друг с другом, которые компилируются и запускаются без другого кода или зависимостей, и которые я могу протестировать, и я смогу лучше помочь вам.   -  person Hovercraft Full Of Eels    schedule 13.03.2011
comment
Кроме того, вы проверяете, что возвращает WinActivate? Должен быть 1 для успеха и 0 для неудачи. И неважно, что я сказал о многопоточности, поскольку другое окно запускается в другом процессе. Кроме того, есть ли что-нибудь еще, что делает ваша программа AutoIt? Это графический интерфейс или простой скрипт? Общается ли он с приложением Java, возможно, через стандартные входы и выходы или через сокеты?   -  person Hovercraft Full Of Eels    schedule 13.03.2011
comment
Кроме того, следует ли использовать WinWaitActive, чтобы позволить вашему сценарию ждать, пока приложение Java станет активным, прежде чем продолжить?   -  person Hovercraft Full Of Eels    schedule 13.03.2011
comment
Спасибо Ховеркрафт. Вы можете увидеть весь скрипт выше... три строчки :). WinActivate возвращает дескриптор окна: 0x0016045C. Я безуспешно пытался использовать WinWaitActive, а также Sleep(3000).   -  person bboyle1234    schedule 14.03.2011
comment
Мне нужно увидеть небольшую программу на Java, с которой работает этот скрипт. Когда я сделал эквивалент вашего скрипта, он отлично работал с моим Java-приложением. Так что я не думаю, что мы придумаем решение, основанное только на сценарии AutoIt.   -  person Hovercraft Full Of Eels    schedule 14.03.2011
comment
ну, java-приложение можно загрузить с thinkorswim.com, если вы хотите открыть учетную запись и установить их программное обеспечение thinkdesktop, хотя это займет у вас много времени ...   -  person bboyle1234    schedule 14.03.2011
comment
Вот чужое решение проблемы: autoitscript.com/forum/topic/87956 -java-udf К сожалению, у меня возникла ошибка при установке моста доступа Java. Может быть, потому что я использую Windows 7? Я не знаю.   -  person bboyle1234    schedule 14.03.2011


Ответы (3)


Учитывая то, что делает paperMoney, вероятно, она намеренно сопротивляется автоматизации. Особенно, когда окно активировано, оно будет подключаться к низкоуровневым событиям мыши и проверять все движения аппаратной мыши с фактическим движением. Используя это, он предотвратит любое симулированное движение мыши. Можно ли использовать Send для ввода клавиш в окне?

person Jos van Egmond    schedule 14.03.2011
comment
согласованный. мы не знаем, на что пойдут их программисты, чтобы предотвратить автоматизацию. Пробовал отправить. Это также не работает. - person bboyle1234; 14.03.2011
comment
Если отправка не работает, то я сильно подозреваю, что они намеренно сопротивляются автоматизации. Вам придется очень глубоко изучить их применение путем декомпиляции, обратного проектирования и других форм взлома. Убедитесь, что лицензия позволяет это сделать. Однако это выходит далеко за рамки AutoIt. Вопрос ответил? - person Jos van Egmond; 14.03.2011
comment
Кстати, вы можете исключить WinActivate как причину, запустив скрипт с помощью Sleep(5000), а затем активировав окно вручную. - person Jos van Egmond; 14.03.2011

Я хотел сделать то же самое. Манданар, наверное, прав. Я также пробовал Autohotkey без успеха. Возможно, TOS запрещает это глубоко в своем приложении. :( Бу!

РЕДАКТИРОВАТЬ:
Некоторые эксперименты Я обнаружил, что TOS в Mac OSX можно контролировать с помощью сценариев с помощью Keyboard Maestro. . Это уродливое, взломанное решение, но оно работает. Вы можете редактировать текстовые поля и щелкать элементы, если знаете положение элементов по осям X, Y.

Keyboard Maestro можно запустить с помощью скриптов (AppleScript, Python и т. д.), так что, возможно, вы сможете создать какой-нибудь сложный Rube Goldberg.

Удачной торговли!

person Jason Wirth    schedule 21.03.2011

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

person charlie hwang    schedule 02.10.2012
comment
Где ваше решение? - person user994572; 11.06.2016