Post by Flipeador » 03 Feb 2023, 20:08
Intenta ejecutar el script, verás en la consola que cada vez que presionas una tecla se mostrará información sobre la tecla pulsada y el identificador del dispositivo.
La dificultad dependerá de lo que quieras hacer, lo primero sería anotar el identificador de tus teclados.
Por ejemplo:
1) Si el teclado #1 tiene el identificador
HID\VID_0000&PID_0000&REV_0000&XX_00.
2) Quieres que la tecla
X envíe
Y.
3) Quieres que
CTRL+A envíe el texto
Hola Mundo.
En una carpeta:
1) Descarga el archivo
interception.py.
2) Crea un archivo
main.py y pon el siguiente contenido:
Code: Select all
from interception import *
RUNNING = True
TIMEOUT = 2500 # ms
interception = Interception()
interception.set_keyboard_filter(KeyFilter.All)
def send_key(device:Device, key:Vk, state:KeyState):
device.stroke.state = state
device.stroke.code = map_virtual_key(key, MapVk.VkToSc)
device.send()
# define una función que envía el texto especificado
def send_text(device:Device, text:str):
send_key(device, Vk.LeftShift, KeyState.Up)
send_key(device, Vk.LeftCtrl, KeyState.Up)
send_key(device, Vk.LeftAlt, KeyState.Up)
shift_down = False
for char in text:
upper = char.isupper()
if upper and not shift_down:
send_key(device, Vk.LeftShift, KeyState.Down)
elif not upper and shift_down:
send_key(device, Vk.LeftShift, KeyState.Up)
shift_down = upper
key = ord(char.upper())
send_key(device, key, KeyState.Down)
send_key(device, key, KeyState.Up)
if shift_down:
send_key(device, Vk.LeftShift, KeyState.Up)
while RUNNING:
# espera por un evento de teclado/mouse
device = interception.wait_receive(TIMEOUT)
if device:
# almacena el identificador del dispositivo en 'id'
id = device.get_hardware_id()
# muestra el ID en la consola
print(id)
# si se trata de un teclado
if device.is_keyboard:
# obtiene la tecla virtual pulsada y la almacena en 'vk'
vk = map_virtual_key(device.stroke.code, MapVk.ScToVk)
# si es el teclado 'HID\VID_0000&PID_0000&REV_0000&XX_00'
if id == 'HID\VID_0000&PID_0000&REV_0000&XX_00':
# si la tecla es 'X'
if vk == Vk.X:
# reemplaza 'X' por 'Y'
# vuelve a convertir la tecla para que la entienda el controlador
# al final 'device.send()' se encarga de enviar esta modificación
device.stroke.code = map_virtual_key(Vk.Y, MapVk.VkToSc)
# o si la tecla es 'A'
elif vk == Vk.A:
# si la tecla CTRL está siendo presionada (CTRL+A)
if is_key_pressed(Vk.LeftCtrl):
# envía el texto 'Hola Mundo'
send_text(device, 'Hola Mundo')
# vuelve al principio de 'while' y evita el 'device.send()' del final
# esto es necesario porque ya enviamos el texto que queríamos
# y no queremos que se envíe la tecla 'A'
continue
# envía el evento de teclado/mouse para que se procese con normalidad
device.send()
3) Ejecuta el archivo
main.py.
Ten cuidado al probar cosas porque si haces algo mal y bloqueas el teclado y mouse tendrás que forzar un reinicio del sistema. La otra opción es tener a mano tu smartphone y conectarte de forma remota a tu PC para forzar la terminación del proceso y desbloquear tu teclado y mouse sin tener que reiniciar, puedes usar el escritorio remoto de Google.
Si lo ves muy complicado, intenta con la versión que te han pasado de AHK, pero yo nunca la he usado así que recibirás mejor ayuda en el subforo en inglés.
Intenta ejecutar el script, verás en la consola que cada vez que presionas una tecla se mostrará información sobre la tecla pulsada y el identificador del dispositivo.
La dificultad dependerá de lo que quieras hacer, lo primero sería anotar el identificador de tus teclados.
Por ejemplo:
1) Si el teclado #1 tiene el identificador [c]HID\VID_0000&PID_0000&REV_0000&XX_00[/c].
2) Quieres que la tecla [c]X[/c] envíe [c]Y[/c].
3) Quieres que [c]CTRL+A[/c] envíe el texto [c]Hola Mundo[/c].
En una carpeta:
1) Descarga el archivo [url=https://github.com/flipeador/Python-Interception-Driver/blob/main/interception.py]interception.py[/url].
2) Crea un archivo [c]main.py[/c] y pon el siguiente contenido:
[Codebox=python file=Untitled.py]from interception import *
RUNNING = True
TIMEOUT = 2500 # ms
interception = Interception()
interception.set_keyboard_filter(KeyFilter.All)
def send_key(device:Device, key:Vk, state:KeyState):
device.stroke.state = state
device.stroke.code = map_virtual_key(key, MapVk.VkToSc)
device.send()
# define una función que envía el texto especificado
def send_text(device:Device, text:str):
send_key(device, Vk.LeftShift, KeyState.Up)
send_key(device, Vk.LeftCtrl, KeyState.Up)
send_key(device, Vk.LeftAlt, KeyState.Up)
shift_down = False
for char in text:
upper = char.isupper()
if upper and not shift_down:
send_key(device, Vk.LeftShift, KeyState.Down)
elif not upper and shift_down:
send_key(device, Vk.LeftShift, KeyState.Up)
shift_down = upper
key = ord(char.upper())
send_key(device, key, KeyState.Down)
send_key(device, key, KeyState.Up)
if shift_down:
send_key(device, Vk.LeftShift, KeyState.Up)
while RUNNING:
# espera por un evento de teclado/mouse
device = interception.wait_receive(TIMEOUT)
if device:
# almacena el identificador del dispositivo en 'id'
id = device.get_hardware_id()
# muestra el ID en la consola
print(id)
# si se trata de un teclado
if device.is_keyboard:
# obtiene la tecla virtual pulsada y la almacena en 'vk'
vk = map_virtual_key(device.stroke.code, MapVk.ScToVk)
# si es el teclado 'HID\VID_0000&PID_0000&REV_0000&XX_00'
if id == 'HID\VID_0000&PID_0000&REV_0000&XX_00':
# si la tecla es 'X'
if vk == Vk.X:
# reemplaza 'X' por 'Y'
# vuelve a convertir la tecla para que la entienda el controlador
# al final 'device.send()' se encarga de enviar esta modificación
device.stroke.code = map_virtual_key(Vk.Y, MapVk.VkToSc)
# o si la tecla es 'A'
elif vk == Vk.A:
# si la tecla CTRL está siendo presionada (CTRL+A)
if is_key_pressed(Vk.LeftCtrl):
# envía el texto 'Hola Mundo'
send_text(device, 'Hola Mundo')
# vuelve al principio de 'while' y evita el 'device.send()' del final
# esto es necesario porque ya enviamos el texto que queríamos
# y no queremos que se envíe la tecla 'A'
continue
# envía el evento de teclado/mouse para que se procese con normalidad
device.send()[/Codebox]
3) Ejecuta el archivo [c]main.py[/c].
Ten cuidado al probar cosas porque si haces algo mal y bloqueas el teclado y mouse tendrás que forzar un reinicio del sistema. La otra opción es tener a mano tu smartphone y conectarte de forma remota a tu PC para forzar la terminación del proceso y desbloquear tu teclado y mouse sin tener que reiniciar, puedes usar el escritorio remoto de Google.
Si lo ves muy complicado, intenta con la versión que te han pasado de AHK, pero yo nunca la he usado así que recibirás mejor ayuda en el subforo en inglés.