Как имитировать щелчок левой кнопкой мыши на низком уровне, чтобы виртуальная клавиатура Microsoft приняла его?

У меня есть задача автоматизации некоторых форм заполнения веб-браузера Java-приложения.

Но у Java есть защита от такой автоматизации. Он имеет защиту от заполнения данных с помощью AutoIt. Из-за этой защиты иногда данные не заполняются правильно в форме Java, и поэтому процесс автоматизации невозможен.

Затем я попытался использовать виртуальную клавиатуру Microsoft, и она хорошо работает с формами Java. Однако он также имеет защиту от AutoIt, и когда я пытаюсь генерировать щелчки мыши на виртуальной клавиатуре с помощью AutoIt, это не работает. Клавиши просто не нажимаются.

Поэтому я пытаюсь как-то написать небольшой исполняемый файл, который будет генерировать единственный щелчок мыши, но на аппаратном уровне. Этот файл всегда должен работать в фоновом режиме и не фокусироваться на фокусе из активного окна. Это позволит мне использовать виртуальную клавиатуру для заполнения форм Java.

я нашел http://glovepie.org/ но я не могу найти способ программно вызвать левый клик мышью. Я могу только переназначить какую-нибудь клавиатуру на щелчок мыши с помощью GlovePIE.

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

РЕДАКТИРОВАТЬ

#include <windows.h>
#include <Winuser.h>

int __stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR    lpCmdLine,
int       cmdShow)
{
void click(){
INPUT input = { 0 }; //INPUT structure
// left down
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //left mouse button down
SendInput(1, &input, sizeof(INPUT)); //call SendInput, pass in input to click

Sleep(1);

// left up
ZeroMemory(&input, sizeof(INPUT)); //clear out input
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //left mouse button up
SendInput(1, &input, sizeof(INPUT)); //call SendInput, pass in input to unclick
}
}

1

Решение

void click(){
INPUT input={0}; //INPUT structure
// left down
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //left mouse button down
SendInput(1,&input,sizeof(INPUT)); //call SendInput, pass in input to click

Sleep(1);

// left up
ZeroMemory(&input,sizeof(INPUT)); //clear out input
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //left mouse button up
SendInput(1,&input,sizeof(INPUT)); //call SendInput, pass in input to unclick
}

Это код C ++ Windows API, который щелкает и отпускает левую кнопку мыши. Это самый низкий уровень, с которым вы, вероятно, хотите иметь дело.
Документация MSDN по SendInput также может быть полезна: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx

0

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