Differenze tra le versioni di "Individuare i tasti della tastiera intercettando i dati grezzi dal suo file-device"
(Nuova pagina: Per gestire direttamente i dati grezzi della tastiera, bisogna innanzitutto individuare il suo file-device. Sappiamo che esso è presente nel percorso ''/dev/input/'', ed è rappresent...) |
|||
Riga 1: | Riga 1: | ||
+ | E' possibile intercettare i dati ''grezzi'' provenienti dalla tastiera, per individuare di ciascu tasto pemuto il suo [http://xoomer.virgilio.it/ramsoft/scancode.html<FONT color=#B22222>''codice di scansione''</font>]. | ||
Per gestire direttamente i dati grezzi della tastiera, bisogna innanzitutto individuare il suo file-device. Sappiamo che esso è presente nel percorso ''/dev/input/'', ed è rappresentato da uno dei file con il nome ''eventN''; laddove "N" è un suffisso del nome rappresentato da un numero. |[[#Note|1]]| Per individuare precisamente quale sia il file-device associato alla tastiera, fra quelli che iniziano per ''event'', bisognerà ''interrogare'' il file "''/proc/bus/input/devices''". Tale file mostra quali dispositivi e gestori di input sono attualmente attivi, ed all'interno del quale bisognerà individuare la riga che inizia per ''H:'', e che rappresenta i driver gestore associati ad un determinato dispositivo. Pertanto, la riga "H:" che si riferisce alla tastiera si presenta visivamente come segue: | Per gestire direttamente i dati grezzi della tastiera, bisogna innanzitutto individuare il suo file-device. Sappiamo che esso è presente nel percorso ''/dev/input/'', ed è rappresentato da uno dei file con il nome ''eventN''; laddove "N" è un suffisso del nome rappresentato da un numero. |[[#Note|1]]| Per individuare precisamente quale sia il file-device associato alla tastiera, fra quelli che iniziano per ''event'', bisognerà ''interrogare'' il file "''/proc/bus/input/devices''". Tale file mostra quali dispositivi e gestori di input sono attualmente attivi, ed all'interno del quale bisognerà individuare la riga che inizia per ''H:'', e che rappresenta i driver gestore associati ad un determinato dispositivo. Pertanto, la riga "H:" che si riferisce alla tastiera si presenta visivamente come segue: | ||
H: Handlers=sysrq kbd event''N'' | H: Handlers=sysrq kbd event''N'' | ||
Riga 5: | Riga 6: | ||
Individuato, dunque, il file-device associato alla tastiera, lo gestiremo con una variabile di tipo ''Process''. | Individuato, dunque, il file-device associato alla tastiera, lo gestiremo con una variabile di tipo ''Process''. | ||
− | Per ogni tasto che viene premuto, vengono intercettati dal file-device della tastiera ben 144 dati; il 21° ci darà il | + | Per ogni tasto che viene premuto, vengono intercettati dal file-device della tastiera ben 144 dati; il 21° ci darà il ''codice di scansione'' del tasto della tastiera. Tale codice, identificando univocamente il tasto appena premuto o rilasciato, è dunque universale per tutti i calcolatori, e quindi tranquillamente utilizzabile nei nostri programmi Gambas. |
Riga 63: | Riga 64: | ||
<FONT color=#006400>' ''Legge l'elemento di numero d0indice 20 della variabile array:''</font> | <FONT color=#006400>' ''Legge l'elemento di numero d0indice 20 della variabile array:''</font> | ||
Print "tasto:", lett[20] | Print "tasto:", lett[20] | ||
− | + | ||
lett.Clear | lett.Clear | ||
Versione delle 11:51, 13 gen 2013
E' possibile intercettare i dati grezzi provenienti dalla tastiera, per individuare di ciascu tasto pemuto il suo codice di scansione. Per gestire direttamente i dati grezzi della tastiera, bisogna innanzitutto individuare il suo file-device. Sappiamo che esso è presente nel percorso /dev/input/, ed è rappresentato da uno dei file con il nome eventN; laddove "N" è un suffisso del nome rappresentato da un numero. |1| Per individuare precisamente quale sia il file-device associato alla tastiera, fra quelli che iniziano per event, bisognerà interrogare il file "/proc/bus/input/devices". Tale file mostra quali dispositivi e gestori di input sono attualmente attivi, ed all'interno del quale bisognerà individuare la riga che inizia per H:, e che rappresenta i driver gestore associati ad un determinato dispositivo. Pertanto, la riga "H:" che si riferisce alla tastiera si presenta visivamente come segue:
H: Handlers=sysrq kbd eventN
laddove N è in realtà un numero.
Individuato, dunque, il file-device associato alla tastiera, lo gestiremo con una variabile di tipo Process.
Per ogni tasto che viene premuto, vengono intercettati dal file-device della tastiera ben 144 dati; il 21° ci darà il codice di scansione del tasto della tastiera. Tale codice, identificando univocamente il tasto appena premuto o rilasciato, è dunque universale per tutti i calcolatori, e quindi tranquillamente utilizzabile nei nostri programmi Gambas.
Codice esemplificativo
Mostriamo di seguito un possibile codice esemplificativo per intercettare e ricavare, per ciascun tasto premuto, il codice di scansione:
Private pr As Process Private lett As New String[] Public Sub Form_Open() Dim s As String Dim ss As New String[] Dim j As Short s = File.Load("/proc/bus/input/devices") s = Replace$(s, "\n", " ") ss = Split(s, " ", "", True) For j = 0 To ss.Max ' Individuiamo la riga contenente il testo "Handlers=sysrq", 'e quindi raccogliamo l'ultima parola della riga medesima. Tale parola sarà in nome del file-device della tastiera: If ss[j] = "Handlers=sysrq" Then s = ss[j + 2] Next ' Per leggere il file-device individuato, gli modifichiamo i permessi '(bisognerà inserire la propria password): Desktop.RunAsRoot("sudo -S chmod 4777 /dev/input" &/ s) ' Poniamo un'attesa mediante un ciclo, fino a che i permessi del file-device non saranno mutati: Do Wait 0.01 Loop Until Stat("/dev/input" &/ s & "").Auth = "rwsrwxrwx" ' Finalmente il file-device viene gestito mediante un "Processo": pr = Exec ["cat", "/dev/input" &/ s] For Read As "processo" End Public Sub pr_Read() Dim b As Byte Dim s As String ' Legge i dati provenienti dal file-device della tastiera: Read #flPro, b lett.Add(CStr(b)) If lett.Count = 144 Then ' Legge l'elemento di numero d0indice 20 della variabile array: Print "tasto:", lett[20] lett.Clear Endif End
Note
[1] Il nome event è dato dalla circostanza che il rapporto tra i vari elementi del sottosistema di input, gli ingressi principali, i driver e gestori di eventi, avviene attraverso eventi.