Хорошо, так. Это сводит меня с ума. Я создаю приложение на 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;
}
Я действительно надеюсь, что кто-нибудь сможет мне помочь, потому что у меня нет идей.
Если важно, чтобы он работал на всех приложениях в Windows, вам, возможно, придется написать драйвер, эмулирующий HID, — установить и зарегистрировать драйвер в качестве клавиатуры в Windows.
Звучит как большая работа, но у Microsoft есть Windows Driver Kit, а в пакете примеров Windows Driver Kit есть несколько интересных примеров, которые вы можете проверить: https://msdn.microsoft.com/en-us/library/ff554118(v=vs.85).aspx
Я предполагаю, что вам нужно только, чтобы он работал на Windows, из-за вашей программы на C ++.
Вы действительно можете сделать это с C ++, используя класс SendKeys. Как подробно в статье, связанной Вот.
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