|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
05-12-2007, 16.00.53 | #1 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
[C] Catturare la pressione di alcuni tasti
Con alcuni ci riesco ma ce ne sono altri che non vogliono saperne di essere intercettati. Potete leggere il codice della funzione qui (forse incollado l'indirizzo nella barra degli indirizzi). Avete idee sul perché vengano ignorati i casi indicati nel codice? Premendo i relativi tasti ottengo come output cose del tipo òR, òI, òQ... |
05-12-2007, 23.24.10 | #2 |
Gold Member
Top Poster
Registrato: 07-04-2000
Loc.: Padova-Vicenza
Messaggi: 4.814
|
Quelli sono tasti speciali che riportano sequenze di 2 caratteri ad ogni pressione.
___________________________________
Con il PC risolvo molti problemi che prima non avevo. - Coltiva Linux che Windows si pianta da solo! |
06-12-2007, 13.24.11 | #3 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Lo so, così come i tasti funzione che vengono catturati dal case 0:
Il problema è che non vengono catturati, né usando il corrispondente nome virtuale (VK_INSERT etc.) né usando i corrispettivi ascii (45 per ins etc.). Come faccio a farglieli catturare? |
06-12-2007, 21.42.39 | #4 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Ti propongo un piccolo esempio esplicativo debitamente commentato che altro non è che lo scheletro di una funzione molto semplice ma completa sul riconoscimento della pressione di un tasto, dell' acquisizione di un range di ASCIICode, della verifica della restituzione dello ScanCode e la sua eventuale l'eliminazione dal buffer della tastiera.
Codice:
char *UserInput(int); char *UserInput(int max){ char c,*Buff; short int i=0,j=0,vmin,vmax; Buff=(char*)malloc(max+1); while(c!=13 || i<2){ // Mai invio a vuoto. // Sempre almeno una lettera ed un numero switch(j){ case 0:vmin='A';vmax='J';break; // Lettere vailde A..J case 1:vmin='0';vmax='9'; // Cifre valide 0..9 } c=toupper(getch()); if(c==0||c==-32) getch(); // Elimina lo scan code, ossia // carico il succ. carattere dal buffer switch(c){ case 8: // Backspace if(i>0){ i--; if(i==0) j=0; printf("\b%c\b",255); }break; default: if((c>=vmin && c<=vmax) && i<max){ printf("%c",c); Buff[i]=c; i++; j=1; } } }Buff[i]='\0'; // Aggiungo il terminatore di stringa return Buff; } main(void){ char *s; printf("Immetti una lettera compresa tra 'A' e 'J' ed un numero:"); s=UserInput(2); printf("\nHai immesso:%s",s); getch(); } |
07-12-2007, 00.06.28 | #5 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Ciao Lory, ho letto adesso al volo il tuo codice ed ho avuto l'illuminazione di mettere un
case -32: getch(); break; adesso tutti quei tasti che volevo disabilitare sono disabilitati. Domani con la mente un po' più fresca guarderò meglio il codice che hai proposto, intanto ti faccio una domanda: perché VK_INSERT non mi catturava la pressione del tasto ins, mentre ad esempio VK_ESCAPE mi catturava esc, VK_RETURN mi catturava invio e VK_BACK mi catturava backspace? |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
tastiera Logitech G15 - Alcuni tasti sono morti | Arthur85 | Hardware e Overclock | 3 | 08-07-2008 17.54.31 |
Associare programmi a tasti funzione | aquila6000 | Windows 7/Vista/XP/ 2003 | 2 | 21-01-2008 02.03.55 |
Mappatura tasti. | borgata | Windows 7/Vista/XP/ 2003 | 6 | 26-08-2005 10.30.38 |
Tastiera 109 tasti | fastdius | Hardware e Overclock | 2 | 23-08-2005 12.42.52 |
topic casalingo | gemm@ | Chiacchiere in libertà | 39 | 03-04-2004 14.03.46 |