Я пытаюсь создать программу, которая отправляет два дополнительных нажатия клавиш для каждого нажатия левой кнопки мыши, которое я делаю. Все это работает нормально, за исключением случаев, когда я нахожусь в другой программе (в моем случае это игра), тогда она ощущает нажатие левой кнопки мыши, но не нажимает две дополнительные виртуальные клавиши для меня. Весь код:
#include <Windows.h>
#include <iostream>
int main ()
{
INPUT ip;
bool press = false;
int i = 0;
while ( true )
{
if ( GetKeyState( VK_LBUTTON) < 0 & !press )
{
std::cout << "press" << i++ << "\n";
// PRESS F8
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0x42; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x77; // virtual-key code
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
if (GetKeyState( VK_F8) < 0) { std::cout << "press f8 \n";}
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
press = true;
}
if ( GetKeyState( VK_LBUTTON) >= 0 )
{
press = false;
}
}
return(0);
}
Теперь я прочитал все, что мог найти по этому поводу, что, кстати, не так уж и много, и я думаю, что это как-то связано с использованием скан-кодов вместо кодов виртуальных клавиш. Проблема в том, что когда я делаю это ip.ki.wScan = 0; и ip.ki.wVk = 0x77; он сделает это правильно, но не внутри игры, то же самое, когда я использую и сканкод, и ВКкод. Но когда VKcode равен нулю, он перестает нажимать клавишу F8, даже когда я не в игре.
Итак, мой вопрос: как мне сделать общесистемное виртуальное нажатие клавиши, которое также будет работать, когда я не на рабочем столе?