PDA

Visualizza la versione completa : [C++] Blocco tastiera


Davide91
08-02-2008, 17:36
Hello all!
Mi servirebbe sapere se è possibile tramite un qualcosa disabilitare l'uso della tastiera...
cioè fare come se fosse scollegata...
Uso Visual Studio 2003 :)
Grazie a chi mi aiuterà :mame:

MItaly
08-02-2008, 18:35
Puoi usare la API BlockInput (ma blocca anche il mouse) o creare una hook globale che scarti tutte le pressioni di tasti.

Davide91
08-02-2008, 18:37
Ma l'applicazione mia è in console win32 non è grafica :master:

Xaratroom
08-02-2008, 18:55
Setta un'interrupt "vuoto", per la tastiera

pallinopinco
08-02-2008, 19:04
Setta un'interrupt "vuoto", per la tastiera


Cioè?! :stordita:

Xaratroom
08-02-2008, 19:26
L'interrupt della tastiera "occupa" la nona posizione, nella tabella dei vettori di interruzione...
Con funzioni quali dos_setvect o dos_getvect (delle quali non ricordo la corretta sintassi) contenute nell'header dos.h è possibile cabiare le funzioni standard con delle funzioni definite dall'utente (void interrupt)...
Al termine del programma basta mettere una keep per farlo terminare senza deallocare la memoria ad esso dedicata.
In questo modo si può ridefinire un interrupt della tastiera che non esegue nessuna operazione(o magari settarlo in modo da ripristinare la vecchia interruzione alla pressione di un tasto o una sequenza particolare)

EDIT:
Vabbè ecco una bozza ...
Controlla la keep se è corretto usarla in questo modo...


#include <stdio.h>
#include <dos.h>
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt newInt(__CPPARGS);

int main(void)
{
/* install interrupt handler */
_dos_setvect(9,newInt);

keep(0, (_SS + (_SP/16) - _psp));

return 0;
}

void interrupt newInt(__CPPARGS)
{

}

Infine l'interrupt della tastiera deve fare una srittura in un registro che non ricordo ... se mi viene lo posto (altrimenti non funziona niente)

pallinopinco
08-02-2008, 19:57
Se non mi sono spiegato ditemelo


Non è un problema di essersi spiegati bene o male, il fatto è che non riesco a capire come vorresti gestire gli interrupt in un'applicazione console WIN32...

oregon
08-02-2008, 19:59
In effetti, tutto quello che hai detto vale per il DOS, quando questo gira effettivamente nel PC.

La "finestra DOS" di Win32 e' una "emulazione" e non puoi gestire gli interrupt in quel modo.

Davide91
08-02-2008, 22:39
Ecco infatti ho chiesto aiuto a voi...
Se ci fate caso una app si chiude con CTRL+C oppure la termini dal task...
Il prof ha chiesto se riuscivamo a fare una cosa che "bloccasse" quelle due funzioni...
Così appena premi invio esci dal programma e puoi "riusare" la tastiera...
Impossibile? :master:

oregon
08-02-2008, 23:00
Il professore vi ha chiesto di evitare che il processo si chiuda dal task manager?

E a che scopo?

Loading