PDA

Visualizza la versione completa : [C] Catturare la pressione di un tasto da un altro programma


duobutch
26-12-2005, 12:23
Ciao, questo il mio problema:
Sto sviluppando un'applicazione in cui uso la funzione

if (getch () == 13) ....

che mi esegue il resto del codice solo quando il tasto premuto "invio".
Il problema sta nel fatto che funziona benissimo quando
la finestra della console in primo piano (si dice attiva?), ma
quando sto usando un gioco o qualsiasi altro programma non intercetta
pi la pressione di "invio" e quindi non parte.
Esiste una soluzione?

Ciao e grazie :ciauz:

ibykos
26-12-2005, 17:42
Se la finestra in primo piano il programma sta girando in foreground, altrimenti gira in background.
Un programma in background ha quasi tutte le caratteristiche di uno in foreground, a parte il fatto di non essere collegato al canale di input, quindi si blocca appena effettua una chiamata a funzione bloccante.
Quello che mi chiedo : perch vuoi utilizzare un programma senza vedere quello che fa?
Se tu hai un gioco aperto ed il tuo pogramma ti fa una domanda, che senso ha che tu risponda senza vederla?
Se non c' bisogno che l'utente del programma sappia cosa succede mentre viene eseguito, semplicemente elimina la getch.
Ciao!

duobutch
27-12-2005, 10:42
Si scusa sono stato un po' generico. Il programma in questione un timer e quando arriva a zero emette un suono. E' per questo che non mi serve vedere il programma mentre in esecuzione, ma ho il problema che non posso farlo partire se uso giochi o altri programmi.

if (getch () == 13) mi serve per farlo partire quando premo invio (13 identifica "invio"), una volta arrivato a 0 premendo ancora invio riparte.

E' possibile usare qualche funzione che ha le caratteristiche di getch ma che "intercetta" la pressione del tasto invio mentre uso altri programmi (quindi quando il timer in background)?

Ciao ciao :ciauz:

Frapper
27-12-2005, 13:23
ciao se sei sotto windows puoi usare svariate api

tipo GetKeyState

una funzione che vuole come parametro il carattere ascii del tasto che si vuole intercettare e che restituisce un valore
che ti permette di capire molte cose tra le quali se il tasto stato premuto... mi sembra che se la usi cosi

a=GetKeyState(13); //metto in A il risultato di GetKeyState
if ((a<0)) //se il tasto stato premuto
{
//qu ci metti il codice che vuoi eseguire quando il
//asto stato premuto
}

dovbrebbe fare al caso tuo...ovviamente devi mettere la funzione in un while ( ricordati di mettere uno sleep) perch
GetKeyState restituisce lo stato di un tasto nel momento in cui GetKeyState viene chiamato

spero di essere stato chiaro ...non credo comunque...chiedi pure delucidazioni ciao

duobutch
27-12-2005, 14:21
Grazie sei stato chiarissimo, appena ho un po' di tempo libero ci lavoro sopra, grazie ancora :)

Loading