Question

J'ai essayé toutes les méthodes normales de truquer les actions du clavier (SendInput / EnvoiTouches / etc), mais aucun d'entre eux ne semblait fonctionner pour les jeux qui ont utilisé DirectInput. Après beaucoup de lecture et de recherche je suis tombé sur Interception , qui est une bibliothèque C ++ qui vous permet de brancher vos appareils dans .

Il a été un temps très long depuis que je travaille avec C ++ (Nothing existait pour C #), donc je suis un peu de difficulté avec cela. J'ai collé dans le code exemple ci-dessous.

Est-ce que ça ressemble il y aurait de toute façon d'engager des actions clés du code en utilisant ce? Les échantillons tout crochet juste dans les dispositifs et actions (x réécrivent impressions clés y, radiers axe de la souris, 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;
    }

Le code que j'ai commenté était quelque chose que j'ai essayé cela ne fonctionne pas.

Était-ce utile?

La solution

Vous devez modifier les états clés pour les états HAUT et BAS pour obtenir touches. Faites attention à la boucle while que la variable appareil est renvoyé par interception_wait, votre code commenté enverrait des événements à ce que ?? appareil est pas initialisés! Oubliez votre code et essayer un peu plus de base. Regardez la ligne dans la boucle avec l'appel interception_send, faire plus de deux appels après, mais ne pas oublier de changer stroke.state avant chaque appel à l'aide INTERCEPTION_KEY_DOWN et INTERCEPTION_KEY_UP afin que vous faux vers le bas et les événements. Vous obtenez des clés supplémentaires à chaque événement du clavier.

En outre, vous pouvez essayez d'utiliser INTERCEPTION_FILTER_KEY_ALL au lieu de INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP. Les touches fléchées peuvent être les spéciales comme mentionné sur le site.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top