/ / Vytvorenie klávesu na celom systéme stlačte SendInput - c ++, stlačenie klávesu, sendinput

Vytvorením klávesy na celom systéme stlačte SendInput - c ++, stlačenie klávesu, sendinput

Snažím sa vytvoriť program, ktorý posiela dvaďalšie stlačenie tlačidiel pre každé ľavé tlačidlo myši stlačte tlačidlo. To všetko funguje dobre, ak nie som v inom programe (v mojom prípade to je hra), potom to zmysel ľavým tlačidlom myši stlačením, ale nie je stlačiť ďalšie dve virtuálne klávesy pre mňa. Celý kód:

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

Teraz som prečítal všetko čo som mohol nájsťto nie je toľko btw a myslím, že to má niečo spoločné s použitím skenovacích kódov namiesto virtuálnych kódov.Problém je v tom, že keď to urobím, ip.ki.wScan = 0 a ip.ki.wVk = 0x77 , bude to robiť správne, ale nie vo vnútri hry, to isté, keď používam skenovací kód aj kód VK, ale keď VKcode je nula, prestane stlačiť kláves F8, dokonca aj keď nie som v hre.

Takže moja otázka je: Ako môžem vytvoriť celoobrazovkové virtuálne tlačové tlačidlo, ktoré bude fungovať aj vtedy, keď nie som na pracovnej ploche?

odpovede:

-1 pre odpoveď č. 1

Ok som zistil, ako používať skenovacie kódy na virtuálne stlačenie klávesov

// 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));

Funkcia dwFlags by mala byť KEYEVENTF_SCANCODE inak automaticky použije kód VK na určenie toho, čo sa má stlačiť.

Teraz to stále neposiela virtuálne tlačové tlačidlo do hry som beží.Kedykoľvek som v tejto hre to jednoducho nefunguje, ako to môžem opraviť?