Ciao a tutti,
stasera non ho molta voglia di scrivere quindi sarò brevissimo,
se volete dei chiarimenti chiedete.
In breve, per leggere lo stato dei tasti in una hack si usa di solito GetAsyncKeyState.
Avrete notato che però ha dei comportamenti strani no?
Cioè non sempre fa quello che vi aspettate.
Soprattutto quando volete con un tasto abilitare o disabilitare una funzione e vi capita che la stessa si abiliti-disabiliti N-volte e alla fine non resta nello stato desiderato...
Il motivo c'è ma non ve lo spiego.
Invece vi "presto" questa funzione che ho scritto che si occupa di restituire lo stato di un qualunque tasto ma in modo "pulito", vi ritorna un IMPULSO chiamiamolo cosi dello stato premuto del tasto.
Quindi se premete un tasto e lo tenete premuto potete stare certi che la funzione vi tornerà lo stato "premuto" SOLO UNA VOLTA, quindi potete usare questa funzione per attivare/disattivare le vostre funzioni in tutta tranquillità.
Ecco la funzione:
C++ Programming
#include <windows.h>
#include <iostream>
using namespace std;
bool KeyPressedPulse(int keyToCheck)
{
// Toggle by Digger 2012 - hackmix.altervista.org
static bool mem_pressed[256];
bool key_pressed = false;
bool key_pulse = false;
// ricaviamo l'IMPULSO del tasto
if ((GetAsyncKeyState(keyToCheck)& 0x8000) ==0x8000)
key_pressed=true;
else
key_pressed=false;
if (key_pressed && ! mem_pressed[keyToCheck])
{
mem_pressed[keyToCheck] = true;
key_pulse = true;
}
if (!key_pressed)
{
mem_pressed[keyToCheck] = false;
}
return (key_pulse);
}
Se volete vedere come si comporta ecco un mini programmino che non fa altro che visualizzare a video se avete premuto il tasto Spazio, F1, F2 o Alt-F3
Come vedrete la scritta corrispondente compare 1 sola volta a video, anche se tenete premuto il relativo tasto.
Programma completo:
C++ Programming
#include <windows.h>
#include <iostream>
using namespace std;
bool KeyPressedPulse(int keyToCheck)
{
// Toggle by Digger 2012 - hackmix.altervista.org
static bool mem_pressed[256];
bool key_pressed = false;
bool key_pulse = false;
// ricaviamo l'IMPULSO del tasto
if ((GetAsyncKeyState(keyToCheck)& 0x8000) ==0x8000)
key_pressed=true;
else
key_pressed=false;
if (key_pressed && ! mem_pressed[keyToCheck])
{
mem_pressed[keyToCheck] = true;
key_pulse = true;
}
if (!key_pressed)
{
mem_pressed[keyToCheck] = false;
}
return (key_pulse);
}
int main()
{
while (!GetAsyncKeyState(VK_ESCAPE))
{
if (KeyPressedPulse(VK_SPACE)) cout << "Spazio" << endl;
if (KeyPressedPulse(VK_F1)) cout << "F1" << endl;
if (KeyPressedPulse(VK_F2)) cout << "F2" << endl;
if (GetAsyncKeyState(VK_MENU) && KeyPressedPulse(VK_F3)) cout << "Alt-F3" << endl;
}
}
ciao