In keyboard Buffer schreiben wird geblockt



  • Hallo!

    Ich möchte gerne in den Keyboard Buffer einen Tastendruck schreiben. Der Keyboard Buffer ist ein Ring-Buffer:

    bool __fastcall TMain::SendTrueKeystroke(int ScanCode)
    {
            // Pointer ist auf 0x0000001C 
            int *BufferPointer = (int *)0x0000001C;
            Label1->Caption = "BufferPointer: " + IntToStr(BufferPointer);
    
            // Pointer nach dem Schreiben
            int NewBufferPointer = *BufferPointer + 2;
            Label2->Caption = "NewBufferPointer: " + IntToStr(NewBufferPointer);
    
            // Startadresse Ringbuffer
            int *BufferPointerStart = (int *)0x00000080;
            Label3->Caption = "BufferPointerStart: " + IntToStr(BufferPointerStart);
    
            // Endadresse Ringbuffer
            int *BufferPointerEnd = (int *)0x00000082;
            Label4->Caption = "BufferPointerEnd: " + IntToStr(BufferPointerEnd);
    
            // Wenn der Pointer auf des Ende des Ringbuffers zeigt muss er wieder auf den Anfang gesetzt werden
            if (NewBufferPointer == *BufferPointerEnd)
            {
                    NewBufferPointer = *BufferPointerStart;
            }
    
            int *BufferFull = (int *)0x0000001A;
            Label5->Caption = "BufferFull: " + IntToStr(BufferFull);
    
            Wenn der Buffer voll ist
            if (NewBufferPointer == *BufferFull)
            {
                    return false;
            }
    
            // Schreibe Tastendruck in Buffer an die Position wo der Pointer zeigt
            int *Buffer = (int *)BufferPointer;
            *Buffer = ScanCode;
    
            // Neue Pointer Position schreiben
            *BufferPointer = NewBufferPointer;
    
            return true;
    }
    

    Aufruf:

    SendTrueKeystroke(0x1C0D);
    

    Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?

    Grüsse



  • Wilder schrieb:

    Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?

    Indem du _nicht_ die WinAPI umgehst? Hier im Forum gibts übrigens auch leute die Tasten versenden .. hab irgendwo grad son Thread rumfliegen sehen..



  • Danke für den Tip

    Das habe ich alles schon versucht (es funktioniert für andere Fenster aber für diejenige Anwendung an die ich die Tasten senden möchte klappt es einfach nicht, habe SendMessage, key_event und SendInput versucht).
    Ich kenne die Suchfunktion vom Forum auch... (musst also nicht ironisch schreiben :-D)

    Grüsse



  • Wilder schrieb:

    Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?

    Falls Dein BS eine MS-Windows-Version ist, dann garnicht.

    Unter den genannten Adressen (0x0000001C, 0x00000080, 0x00000082, 0x0000001A) befindet sich nichts.

    Deshalb wirken sie wie "Null-Pointer" und verursachen eine Schutzverletzung.


Anmelden zum Antworten