Remapear teclas de dos teclados de forma independiente Topic is solved

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

HECRAM

Remapear teclas de dos teclados de forma independiente

Post by HECRAM » 01 Feb 2023, 18:24

Saludos. quiero utilizar dos teclados a la vez en el computador (por mi trabajo) y quiero remapear las teclas de cada teclado de forma independiente. es decir, si apreto la tecla "a" en el teclado 1 deseo que salga la a o cualquier otra cosa que le asigne, pero que al apretar la misma tecla "a" en el teclado 2 salga algo diferente que le asigne, letra, atajo, etc.
no sé mucho de esto, por no decir nada, pero no encuentro tutoriales ni ningún sw que ayude, traté con ChatGPT y me dio este código, pero no compila, me da error. no sé si podría funcionar tampoco al compilar porque ya traté una version anterior que me dio y no funcionó. por favor, podrían decirme si es posible usar dos teclados de forma independiente en cada tecla, algún script?
no sé si el hotkey reconoce estas variables de teclado 1 y 2.


[Mod edit: Removed nonsense ChatGPT code, which is not allowed according to our forum rules.]
Last edited by Flipeador on 02 Feb 2023, 07:20, edited 1 time in total.
Reason: improve title

User avatar
gregster
Posts: 9224
Joined: 30 Sep 2013, 06:48

Re: USAR DOS TECLADOS A LAS VEZ. Tengo un script que dio chatGPT pero no funciona  Topic is solved

Post by gregster » 01 Feb 2023, 20:03

No es fácil, pero puedes probar AutoHotInterception: viewtopic.php?f=6&t=45307
Por favor, no publique ningún código ChatGPt. No está permitido según las reglas de nuestro foro.

HECRAM

Re: USAR DOS TECLADOS A LAS VEZ. Tengo un script que dio chatGPT pero no funciona

Post by HECRAM » 01 Feb 2023, 22:03

Lo siento, no lo sabía. Muchas gracias por la información.

User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Remapear teclas de dos teclados de forma independiente

Post by Flipeador » 02 Feb 2023, 07:31

Hola, el controlador Interception, tal y como mencionó gregster, es una buena opción.

Si la versión en AHK te da problemas puedes probar usar Python, tal vez se te haga más fácil, dependiendo de tus conocimientos.
Puedes usar mi código aquí: https://github.com/flipeador/Python-Interception-Driver.
Lamentablemente no he documentado nada, pero viendo el código del ejemplo puedes intuir su funcionamiento, ya que no tiene mayor complejidad.

Sin embargo, ten en cuenta que el controlador Interception tiene ciertas limitaciones, al parecer el desarrollador tiene su proyecto un poco abandonado.
Por ejemplo, si instalas el controlador olvídate de estar conectando y desconectando tu mouse y teclado, ya que si lo haces dejarán de funcionar y tendrás que reiniciar el sistema.

Por cierto, ten cuidado con ChatGPT, es una IA muy limitada y está a años luz de reemplazar el trabajo de nadie, sus respuestas son muy vagas e inútiles más allá de cosas muy básicas, si le preguntas cosas de programación muy probablemente te dará código sin sentido o algo que podrías encontrar en Google en 1 segundo.

:wave:

HECRAM

Re: Remapear teclas de dos teclados de forma independiente

Post by HECRAM » 02 Feb 2023, 18:42

Muy amable, en cuanto a Chatgpt, lo hice porque no encontraba solución en ninguna parte sobre lo que quería, usar dos teclados a la vez de forma independiente, pero ya vi que es inútil. gracias por el consejo, tomo nota. por otro lado, estuve viendo la recomendación de gregster y es muy buena solo que la instalación parece complicada porque en el video tutorial que dejó gregster (que es un supervideo) es de una versión más antigua (5.0) y no creo que la nueva versión se instale igual. aun así, me preocupa lo que dices de las limitaciones, especialmente eso de desconectar/conectar el mouse y teclado, sería catastrófico para mí :shock: . lo de Python me parece una alternativa interesante a explorar aunque nunca lo he usado antes. Gracias por dejarme usar tu código. lo voy a ver y regresaré a ver que si puedo obtener más ayuda, que seguro será que sí :lol: . gracias.

User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Remapear teclas de dos teclados de forma independiente

Post by Flipeador » 02 Feb 2023, 20:55

No se de que video hablas ni dónde has leído lo de versión 5, pero el controlador ha estado durante años sin actualizarse.

Te recomendé Python porque la versión de AHK está muy sobrecargada de información y cierta complejidad ridículamente innecesaria, además obtendrás un peor rendimiento ya que utiliza C# de por medio.

Si te agobia tanto texto como a mí y decides dedicarle un poco de tiempo a Python, es realmente sencillo, simplemente instalás Python, instalás Interception, y listo, ya puedes ejecutar el script en el ejemplo de mi repositorio en GitHub.

El problema que te comentaba con Interception, es que el controlador asigna números del 1 al 20 para los dispositivos tanto físicos como virtuales de mouse y teclado, cada vez que desconectas y vuelves a conectar un periférico el controlador le asigna un nuevo número (+1) pero los anteriores quedan "en el olvido" (absurdo), cuando llegas al límite el controlador es incapaz de reconocer más periféricos y cuando los conectes ya no funcionarán, y te verás obligado a reiniciar el sistema.

Si realmente necesitas estar conectando y desconectando tus mouse y/o teclados entonces tendrás que buscar otra opción, ahora mismo no se me ocurre ninguna, lamentablemente Windows no provee una forma nativa de identificar el teclado que ha enviado una pulsación de tecla.

HECRAM

Re: Remapear teclas de dos teclados de forma independiente

Post by HECRAM » 03 Feb 2023, 17:47

me di cuenta de mi error, lo del video (https://www.youtube.com/watch?v=gZxebHjsXyw), lo saqué de alguna parte del foro que estuve leyendo y mi cabeza confundió el origen, al igual que la versión.´
por otro lado, estuve viendo que tu código tambien hace cosas para mouse, quisiera simplificarlo y quitar esas partes y poder enfocarme solo en lo concerniente para teclado y solo referente a tres cosas, (remapear teclas, asignar una palabra a teclas y atajos), es todo lo que necesito, estoy aprendiendo sobre Phyton, pero aun así temo no poder editar correctamente ahora eso, quiero aprender y no solamente correr el scrit. Alguna sugerencia, por favor?

User avatar
Flipeador
Posts: 1205
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Remapear teclas de dos teclados de forma independiente

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.

Post Reply

Return to “Pedir Ayuda”