Тема: В чому відмінність віртуальної клавіатури від реальної?
В чому відмінність віртуальної клавіатури від реальної? Пробую написати автоклікер, але чомусь гра не реагує на віртуальні натиски. Використовую robot java
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Java → В чому відмінність віртуальної клавіатури від реальної?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
В чому відмінність віртуальної клавіатури від реальної? Пробую написати автоклікер, але чомусь гра не реагує на віртуальні натиски. Використовую robot java
Можливо бібліотеку, порекомендуєте чі що почитать). Рівень знань початковий....
Пробую написати автоклікер, але чомусь гра не реагує на віртуальні натиски.
Натиски віртуальних клавіш (keyPress) ?
keyRelease використовуєте ?
delay використовуєте ? Поставте його хоча б на 100,
robot.delay(100) між викликами keyPress.
Без delay ОС або гра може не встигати обробити натиски клавіш. (приклад)
Крім того вікно гри має бути активним на момент роботи методів keyPress, keyRelease з вашої програми.
Деякі програми не чутливі до "віртуальних клавіатур", колись таке було з програмами на DirectX, зараз не знаю як там в них справи.
І взагалі, покажіть свій код.
Віртуальна клавіатура, часом, не вбудована у програму?
Код простий наприклад:
public static void main(String[] args) {
try {
Robot robot = new Robot();
// Creates the delay of 5 sec so that you can open notepad before
// Robot start writtinghi budy
robot.delay(5000);
robot.keyPress(55);
robot.delay(100);
robot.keyRelease(55);
robot.keyPress(KeyEvent.VK_I);
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyPress(KeyEvent.VK_B);
robot.keyPress(KeyEvent.VK_U);
robot.keyPress(KeyEvent.VK_D);
robot.keyPress(KeyEvent.VK_Y);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
Суть в тому, що є захист від автоклікеру. Программа відрізняє натиски від фізичної клавіатури та віртуальної... От і питання в тому, як подати скан-код клавіш? Чі якось так...
Гм, тре дивитись, що відбувається в потрохах викликів robot.keyPress(...)
Наскільки відомо, то різниці між натиском фізичної кнопки і емуляцією її шляхом надсилання аля SendMessage(handler, WM_KEYDOWN, VK_RETURN) до вікна (хендлера) нічим не відрізняється. Бо, по-перше, між фізичним пристроєм і вашою грою є прослойка у вигляді ОС та драйвера клавіатури, який в свою чергу при обробленні натиску фізичної кнопки на клавіатурі відправляє хендлеру все ту ж віртуальну кнопку і те, що її було натиснуто.
А не працювати може, що завгодно.. Від отримання хендлера, до самого відправлення натиснення кнопки.
На скільки я розумію правильно було б емулювати через SendInput ф-ю, проте вона надсилає івент лише у активне вікно.
Раджу вам записати, що саме відсилається при натисканні ваших клавіш, із затримками між подіями (тобто просто часом), і потім повторювати всю комбінацію - KeyDown, KeyPressed, KeyUp, з відповідними delay-ами.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися