/ / Creación de una tecla de todo el sistema, pulse EnviarInput - c ++, pulsación de tecla, envío de entrada

Creación de una tecla de todo el sistema, presione EnviarInput - c ++, tecla, envío de entrada

Estoy tratando de hacer un programa que envíe dosSe presionan teclas adicionales con cada pulsación del botón izquierdo del ratón que hago. Todo esto funciona bien, excepto cuando estoy en otro programa (en mi caso es un juego), entonces siente que se presiona el botón izquierdo del mouse pero no presiona las dos teclas virtuales adicionales para mí. El código completo:

#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);
}

Ahora he leído todo lo que pude encontrar respecto aesto, que no es mucho por cierto, y creo que tiene algo que ver con usar scancodes en lugar de virtualkeycodes. El problema es que cuando hago esto ip.ki.wScan = 0; y ip.ki.wVk = 0x77 ; lo hará bien pero no dentro del juego, igual cuando uso scancode y VKcode. Pero cuando VKcode es cero, deja de presionar la tecla F8 incluso cuando no estoy en el juego.

Así que mi pregunta es: ¿Cómo hago una pulsación de tecla virtual en todo el sistema que también funcione cuando no estoy en el escritorio?

Respuestas

-1 para la respuesta № 1

Ok, descubrí cómo usar los códigos de escena para hacer la pulsación de tecla virtual

// PRESS F8
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = MapVirtualKey(VK_F8, 0); // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0;//0x77; // virtual-key code

ip.ki.dwFlags = KEYEVENTF_SCANCODE; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
if (GetKeyState( VK_F8) < 0) { std::cout << "press f8 n";}
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));

Los dwFlags deben ser KEYEVENTF_SCANCODE, de lo contrario, utilizará automáticamente el código VK para determinar cuál se supone que se debe presionar.

Ahora todavía no envía la tecla virtual al juego que estoy ejecutando. Siempre que esté en este juego no funciona, ¿cómo puedo solucionarlo?