Є програма (бот) на 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 ++ не влізе в розумний розмір відповіді.