И Java, и C ++ отказываются эмулировать клавиши со стрелками?

Хорошо, так. Это сводит меня с ума. Я создаю приложение на Java, и оно требует симуляции клавиш клавиатуры. Мол, я хочу обмануть весь компьютер, думая, что нажата клавиша. (Не волнуйтесь, мои намерения не являются злонамеренными: P) Проблема в том, что я использовал Java-класс Robot для имитации нажатия клавиш, и есть ошибка, которая не позволяет нажимать клавиши со стрелками в некоторых приложениях , для любой причины.

Так что я решил сделать небольшую программу на C ++ для обработки имитации ввода и вызывать ее из Java. Но вот кикер: клавиши со стрелками еще не работают для некоторых программ. Мол, это просто не регистрируется. Насколько я могу судить, это те же программы, которые не работали на Java.

Есть ли какой-либо способ имитировать нажатия клавиш со стрелками во всех программах, 100% времени? Я открыт для любого языка на данный момент.

Вот программа на C ++, которая у меня есть, если она имеет значение.

#define WINVER 0x0500
#include <windows.h>
#include <iostream>
#include <cstring>

int main()
{
INPUT ip;

Sleep(2000);

ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

ip.ki.wVk = VK_RIGHT;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));

Sleep(1000);

ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));

return 0;
}

Я действительно надеюсь, что кто-нибудь сможет мне помочь, потому что у меня нет идей.

0

Решение

Если важно, чтобы он работал на всех приложениях в Windows, вам, возможно, придется написать драйвер, эмулирующий HID, — установить и зарегистрировать драйвер в качестве клавиатуры в Windows.
Звучит как большая работа, но у Microsoft есть Windows Driver Kit, а в пакете примеров Windows Driver Kit есть несколько интересных примеров, которые вы можете проверить: https://msdn.microsoft.com/en-us/library/ff554118(v=vs.85).aspx

Я предполагаю, что вам нужно только, чтобы он работал на Windows, из-за вашей программы на C ++.

2

Другие решения

Вы действительно можете сделать это с C ++, используя класс SendKeys. Как подробно в статье, связанной Вот.

0

keybd_event() хотя осуждается это еще одна функция, которая синтезирует нажатие клавиш. Коды клавиш отображаются на клавиатурных шпионах, пока эта целевая программа находится в фокусе. Имитация нажатия клавиши меню «Пуск» так же проста —

#include<iostream>
#include<windows.h>

using namespace std;int main(){
cout<<"Standby : Simulating start menu key press \n\n";

keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

return 0;
}

Чтобы имитировать нажатие клавиш со стрелками вверх и вниз, попробуйте следующее:

// simulate RIGHT key press
keybd_event(VK_RIGHT,0,0,0);
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);

// simulate LEFT key press
keybd_event(VK_LEFT,0,0,0);
keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0);

// simulate UP key press
keybd_event(VK_UP,0,0,0);
keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);

// simulate DOWN key press
keybd_event(VK_DOWN,0,0,0);
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);

keybd_event (устарело): https://msdn.microsoft.com/en-us/library/ee504289.aspx

keybd_event: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx

Коды виртуальных клавиш: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

0
По вопросам рекламы [email protected]