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.