un breve y simple código para interceptar en aplicaciónes sin interfaz gráfica cuando el usuario presiona la tecla "Q" en su teclado:
Private pr As Process
Private lett As New String[]
Public Sub Main()
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
' Localizamos la línea que contiene el texto "Handlers=sysrq", y luego recogemos la última palabra de la propia línea.
' Esta palabra será el nombre del file-device del teclado:
If ss[j] = "Handlers=sysrq" Then s = ss[j + 2]
Next
' Para leer el file-device detectado, tenemos que tener los permisos necesarios. Entonces se modifican.
' La palabra "mi_password" de la siguiente línea es la contraseña del usuario:
Shell "echo mi_password | sudo -S chmod 4777 /dev/input" &/ s Wait
' En fin el file-device es manejado por "Process":
pr = Exec ["cat", "/dev/input" &/ s] For Read As "processus"
End
Public Sub processus_Read() ' Cada vez que se pulsa una tecla en el teclado...
Dim b As Byte
Dim s As String
'...lee los datos del file-device del teclado:
Read #pr, b
lett.Add(CStr(b))
If lett.Count = 144 Then
If lett[20] = "16" Then Print "Interceptado tecla "; Quote(" Q "); " del teclado !"
lett.Clear
Endif
End
Private lett As New String[]
Public Sub Main()
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
' Localizamos la línea que contiene el texto "Handlers=sysrq", y luego recogemos la última palabra de la propia línea.
' Esta palabra será el nombre del file-device del teclado:
If ss[j] = "Handlers=sysrq" Then s = ss[j + 2]
Next
' Para leer el file-device detectado, tenemos que tener los permisos necesarios. Entonces se modifican.
' La palabra "mi_password" de la siguiente línea es la contraseña del usuario:
Shell "echo mi_password | sudo -S chmod 4777 /dev/input" &/ s Wait
' En fin el file-device es manejado por "Process":
pr = Exec ["cat", "/dev/input" &/ s] For Read As "processus"
End
Public Sub processus_Read() ' Cada vez que se pulsa una tecla en el teclado...
Dim b As Byte
Dim s As String
'...lee los datos del file-device del teclado:
Read #pr, b
lett.Add(CStr(b))
If lett.Count = 144 Then
If lett[20] = "16" Then Print "Interceptado tecla "; Quote(" Q "); " del teclado !"
lett.Clear
Endif
End