Як створити бота на java який працює з додатком (НЕ java) без фокусу stack overflow на

Є програма (бот) на Java. Є ІНШЕ додаток (Гра) у вікні (1024х768).

Потрібен бот який буде автоматичний виконувати дії в грі.
У Java є клас Robot:

який підходить для цього (Може емулювати натискання, кліки миші), але цього класу обов'язково потрібен фокус програми.

Є який-небудь спосіб вирішення, який буде працювати без фокусу?
(Підійде будь-яке рішення, навіть якщо доведеться писати цю частину коду на C / C ++)

заданий 4 Лютого '16 о 23:17

Зробити таке можна тільки за допомогою JNI, тобто код доведеться писати на C / C ++.

Рекомендую подивитися, як влаштована всередині бібліотека jnativehook. вона вже вміє нативної ловити події.

Викликати C ++ код з Java можна так:

1) створити Java-обгортку для виклику коду:

2) написати програму на С ++ (sendkeys_impl.cpp)

3) зробити заголовок для взаємодії з Сі кодом (sendkeys.h)

4) оформити її у вигляді DLL, в C файлі (sendkeys.c) вказавши таку конструкцію:

5) зібрати якось так: g ++ -Wl, - add-stdcall-alias -I "% JAVA_HOME% \ include" -I "% JAVA_HOME% \ include \ win32" -shared -o sendkeys.dll sendkeys.c sendkeys .cpp 6) можна запускати! java SendkeysTest або java -Djava.library.path =. SendkeysTest

Більш докладно все це описано в одній з безлічі інструкцій по JNI.

Далі можна скористатися будь-яким туторіали по відправці натискань клавіш за допомогою C ++, або поставити це ворос на StackOverflow. Місце, куди вписувати відповідний код, у вас вже є.

Якщо вам потрібно посилати довільні коди, то вам потрібен або SendInput () (він є на windows 2k / xp і тому кращий), або keybd_event () (працює в нових ОС). Ще є події WM_SYSCOMMAND / WM_KEYDOWN / WM_KEYUP / WM_CHAR події для SendMessage.

Наприклад, ось так можна відправляти повідомлення в Notepad за допомогою згаданого вище SendInput:

Або за допомогою SendMessage:

(Приклади взяті з ось цього обговорення на основному StackOverflow)

Натискання кнопок миші і її рух теж можна відправляти через SendInput:

Далі вже ваше завдання все це правильно склеїти і адаптувати під вашу задачу, написання абсолютно коректною посилалкі клавіш на комбінації Java + C ++ не влізе в розумний розмір відповіді.

Схожі статті