Я пытаюсь создать консольное приложение на C #, которое будет нажимать и отпускать клавишу пробела, когда я удерживаю среднюю кнопку мыши.
Приложение работает в текстовых приложениях (блокнот, веб-браузер и т. Д.), Видя, как можно просто удерживать клавишу пробела, и оно будет фактически создавать пробелы, но не в играх.
Например, если я удерживаю среднюю кнопку, кажется, что она не регистрирует событие keyup, что означает, что я должен физически нажимать клавишу пробела, чтобы снова «прыгнуть».
Вот код:
static void Main(string[] args)
{
Console.WriteLine("Press down the middle mouse button to jump.\n"
+ "Press F5 to pause the application.");
while (true)
{
if ((GetAsyncKeyState(VK_MIDDLEBUTTON) & KEY_PRESSED) > 0)
{
SendInputWithAPI();
}
else if ((GetAsyncKeyState(VK_F5) & KEY_PRESSED) > 0)
{
PauseFunc();
}
Thread.Sleep(10);
}
}
static void SendInputWithAPI()
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1; // 1 = Keyboard Input
Input.U.ki.wScan = ScanCodeShort.SPACE;
Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
Random time = new Random();
int randTime = time.Next(1, 4);
Thread.Sleep(randTime);
Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
SendInput(1, Inputs, INPUT.Size);
}
static void PauseFunc()
{
Console.WriteLine("Paused... Press any key to continue.");
Console.ReadKey(true);
}
А вот и весь код со всеми структурами:
https://hastebin.com/oregahesoh.cs
Я правильно сделал событие keyup?
Я точно знаю, что Thread.Sleep (randTime) не является проблемой, поскольку я пробовал разные времена (с точностью до секунды).