Frage

Ich habe alle normalen Methoden für Tastaturaktionen ausprobiert (sendInput/sendkeys/etc), aber keiner von ihnen schien für Spiele zu funktionieren, die DirectInput verwendeten. Nach viel Lesen und Suchen stolperte ich darüber Abfangen, Das ist eine C ++ - Bibliothek, mit der Sie sich in Ihre Geräte einschließen können.

Es ist sehr lange her, dass ich mit C ++ gearbeitet habe (für C#existierte nichts), also habe ich Probleme damit. Ich habe den Beispielcode unten eingefügt.

Sieht es so aus, als würde es trotzdem geben, Schlüsselaktionen aus dem Code zu initiieren? Die Muster sind alle nur in die Geräte ein und schreiben Aktionen um (X -Schlüssel druckt y, invertiert die Mausachse usw.).

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;
    }

Der Code, den ich kommentierte, war etwas, das ich ausprobiert habe und das nicht funktioniert hat.

War es hilfreich?

Lösung

Sie müssen die Schlüsselzustände für Auf- und Abwärtszustände optimieren, um Tastenpressen zu erhalten. Achten Sie auf die while -Schleife, dass die Variable Gerät wird von interception_wait zurückgegeben, Ihr kommentierter Code würde Ereignisse an was senden? Gerät ist nicht initialisiert! Vergessen Sie Ihren Code und probieren Sie noch eine grundlegendere. Schauen Sie sich die Zeile in der Schleife mit dem Anruf interception_send an, tätigen Sie mehr zwei Anrufe danach, aber vergessen Sie nicht, den Schlaganfall zu ändern. State vor jedem Anruf mit interception_key_down und interception_key_up, damit Sie die Ereignisse fälschen und nach oben fälschen. Bei jedem Tastaturereignis erhalten Sie zusätzliche Tasten.

Sie können auch versuchen, interception_filter_key_all anstelle von interception_filter_key_down | zu verwenden Interception_filter_key_up. Die Pfeilschlüssel sind möglicherweise besondere, wie auf der Website erwähnt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top