Использование C для отправки событий клавиатуры - PullRequest
0 голосов
/ 26 апреля 2020

Так что я использую Java, и с этим я могу использовать робота для нажатия клавиш. Теперь части программного обеспечения, для которых мы хотим использовать нажатия клавиш, не принимают их (они ничего не делают), но клавиатура работает.

Итак, первое, что я попробовал, - это использование библиотеки C dll, которая отправляет ключи используя SendInput. Если я использую их на веб-сайте, таком как https://keycode.info/, они работают лучше, чем нажатия клавиш робота (они показывают больше информации, больше похожей на нажатия клавиш на клавиатуре.

Однако, все еще не все программное обеспечение регистрирует ввод. Большинство делает так, что я знаю, что они работают «должным образом», но для некоторых приложений они все еще представляют загадку. Если использовали некоторое программное обеспечение для обнаружения клавиатуры, которое работает хорошо, когда я нажимаю кнопки на моей фактической клавиатуре, но оба java Библиотека роботов, а также C SendInput показывают какую-либо активность в этом программном обеспечении.

Чего мне не хватает? (Минимальный рабочий пример)

#include <windows.h>

int main() {

INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0;
ip.ki.wScan = MapVirtualKey(0x41, MAPVK_VK_TO_VSC);
ip.ki.dwFlags = KEYEVENTF_SCANCODE;

SendInput(1, &ip, sizeof(INPUT));

sleep(100);

ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;

SendInput(1, &ip, sizeof(INPUT));
return;
}

Я также играл со временем между нажатием и выпуская, но это, казалось, не имело значения (для некоторых приложений это имеет значение, но для тестера клавиатуры это не так.)

Я действительно хочу смоделировать клавиши клавиатуры, но я не уверен, где это искать SendInput показался мне самым низким уровнем, но я ошибаюсь, есть идеи или решения?

...