Pregunta

Estoy mirando para crear un enlace global ratón que funciona en XP / Vista / 7, que me permitiera acceder al X, los valores de Y que el ratón está insertando, y modificar los valores antes de que lleguen de Windows ...

También quiero ser capaz de simular las entradas de ratón en ratones entre las entradas reales ...

Por ejemplo, digamos que nuestras entradas eran los siguientes:

1: 1,0 2: 2,0 3: 3,0 4:??,

Quiero ser capaz de interceptar número de entrada 4 y ejecutarlo a través de una sentencia 'if': Si el valor de la entrada coincide con ciertos parámetros, quiero modificar el valor sumando o restando de ella ...

Un ratón USB tiene una tasa de sondeo predeterminado de 125 Hz y un máximo de 1000 Hz ...

Si es posible (especialmente cuando la tasa de sondeo se establece menor que 1000 Hz) Me gustaría 'inyectar' entradas 'entre las actualizaciones de ratón reales (crítico) Así, por ejemplo:

(en milisegundos)

0,008 - 1,0 0016 - 1,0 0032 - 2,0

Así que el ratón está actualizando a 125 Hz ... ¿Podría detectar la frecuencia de los insumos, y enviar una entrada cada otra entrada ??? Así, por ejemplo, yo podría 'doble' la frecuencia de 125Hz ratón a 250 Hz, y simular mi propia 'en medio' actualizaciones sobre la base de cualesquiera reglas puse ...

¿Algo de esto parece razonable? En este momento estoy trabajando en C # y yo estaba trabajando con el "Gma.UserActivityMonitor" de este tutorial aquí: http://www.codeproject.com/KB/cs/globalhook.aspx pero por alguna razón consigo un impacto en el rendimiento que hace que la utilización de este código con los juegos de pantalla completa tiene un retraso inutilizable en las entradas de ratón debido al gancho ...

Tal vez tengo que escribir algo en C ++? Cualquier ayuda sería muy apreciada. Gracias!

¿Fue útil?

Solución

este enlace en el acaparamiento de entrada del ratón prima será útil, que incluye una biblioteca escrita para C #, así como una versión de C ++. Tiene el propósito de permitir el uso de varios ratones en Windows, pero es de esperar que puede emular lo que se está usando para lo que quiere lograr.

Otros consejos

He construir una biblioteca que le puede ayudar con eso, se trata de una simple biblioteca c y puede trabajar en juegos de ventanas donde común api no .

El siguiente ejemplo muestra cómo invertir los movimientos del ratón con esta biblioteca, que, básicamente, sólo multiplica los desplazamientos en el eje vertical por -1 para que ocurra en la dirección contraria:

#include <interception.h>
#include "utils.h" // for process priority control

enum ScanCode
{
    SCANCODE_ESC = 0x01
};

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

    raise_process_priority();

    context = interception_create_context();

    interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);
    interception_set_filter(context, interception_is_mouse, INTERCEPTION_FILTER_MOUSE_MOVE);

    while(interception_receive(context, device = interception_wait(context), &stroke, 1) > 0)
    {
        if(interception_is_mouse(device))
        {
            InterceptionMouseStroke &mstroke = *(InterceptionMouseStroke *) &stroke;

            if(!(mstroke.flags & INTERCEPTION_MOUSE_MOVE_ABSOLUTE)) mstroke.y *= -1;

            interception_send(context, device, &stroke, 1);
        }

        if(interception_is_keyboard(device))
        {
            InterceptionKeyStroke &kstroke = *(InterceptionKeyStroke *) &stroke;

            interception_send(context, device, &stroke, 1);

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

    interception_destroy_context(context);

    return 0;
}    

Usted puede ver que hay una comprobación de la bandera INTERCEPTION_MOUSE_MOVE_ABSOLUTE antes de invertir los desplazamientos verticales. Normalmente, el sistema operativo trabaja con coordenadas relativas, pero he experimentado que dentro de las máquinas virtuales las coordenadas del ratón obras en forma absoluta, no relativa. Para simplificar esta muestra está invirtiendo sólo desplazamientos relativos.

Puede consultar más documentación en http://oblita.com/Interception .

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