Pregunta

He probado todos los métodos normales de fingir acciones de teclado (sendInput/sendkeys/etc), pero ninguno de ellos parecía funcionar para juegos que usaban DirectInput. Después de mucha lectura y búsqueda, me topé Interceptación, que es una biblioteca C ++ que le permite conectarse a sus dispositivos.

Ha pasado mucho tiempo desde que trabajé con C ++ (nada existió para C#), así que tengo algunos problemas con esto. He pegado en el código de muestra a continuación.

¿Parece que habría de todos modos para iniciar acciones clave del código que usa esto? Todas las muestras simplemente se conectan a los dispositivos y reescriben acciones (x impresiones clave y, invertir eje del mouse, etc.).

enum ScanCode
{
    SCANCODE_X   = 0x2D,
    SCANCODE_Y   = 0x15,
    SCANCODE_ESC = 0x01
};

int main()
{
    InterceptionContext context;
    InterceptionDevice device;
    InterceptionKeyStroke stroke;

    raise_process_priority();

    context = interception_create_context();

    interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);

    /*
    for (int i = 0; i < 10; i++)
    {
        Sleep(1000);
        stroke.code = SCANCODE_Y;
        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);
    }
    */

    while(interception_receive(context, device = interception_wait(context), (InterceptionStroke *)&stroke, 1) > 0)
    {
        if(stroke.code == SCANCODE_X) stroke.code = SCANCODE_Y;

        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);

        if(stroke.code == SCANCODE_ESC) break;
    }

El código que comenté fue algo que probé que no funcionó.

¿Fue útil?

Solución

Debe ajustar los estados de llave para los estados arriba y abajo para obtener presiones de teclas. Preste atención al bucle while que la variable dispositivo es devuelto por intercepcion_wait, su código comentado enviaría eventos a qué? dispositivo no se inicializa! Olvida su código e intente algo más básico. Mire la línea dentro del bucle con la llamada Interception_Send, haga más dos llamadas después de ella, pero no olvide cambiar el golpe. Estado antes de cada llamada usando Interception_Key_down e Interception_Key_UP para fingir eventos hacia abajo y hacia arriba. Obtendrá teclas adicionales en cada evento de teclado.

Además, puede intentar usar interceptación_filter_key_all en lugar de intercepción_filter_key_down | Intercepción_filter_key_up. Las teclas de flecha pueden ser especiales como se menciona en el sitio web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top