<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[In keyboard Buffer schreiben wird geblockt]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte gerne in den Keyboard Buffer einen Tastendruck schreiben. Der Keyboard Buffer ist ein Ring-Buffer:</p>
<pre><code class="language-cpp">bool __fastcall TMain::SendTrueKeystroke(int ScanCode)
{
        // Pointer ist auf 0x0000001C 
        int *BufferPointer = (int *)0x0000001C;
        Label1-&gt;Caption = &quot;BufferPointer: &quot; + IntToStr(BufferPointer);

        // Pointer nach dem Schreiben
        int NewBufferPointer = *BufferPointer + 2;
        Label2-&gt;Caption = &quot;NewBufferPointer: &quot; + IntToStr(NewBufferPointer);

        // Startadresse Ringbuffer
        int *BufferPointerStart = (int *)0x00000080;
        Label3-&gt;Caption = &quot;BufferPointerStart: &quot; + IntToStr(BufferPointerStart);

        // Endadresse Ringbuffer
        int *BufferPointerEnd = (int *)0x00000082;
        Label4-&gt;Caption = &quot;BufferPointerEnd: &quot; + 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-&gt;Caption = &quot;BufferFull: &quot; + 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;
}
</code></pre>
<p>Aufruf:</p>
<pre><code class="language-cpp">SendTrueKeystroke(0x1C0D);
</code></pre>
<p>Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171133/in-keyboard-buffer-schreiben-wird-geblockt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 04:31:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171133.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jan 2007 19:42:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In keyboard Buffer schreiben wird geblockt on Mon, 22 Jan 2007 19:42:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte gerne in den Keyboard Buffer einen Tastendruck schreiben. Der Keyboard Buffer ist ein Ring-Buffer:</p>
<pre><code class="language-cpp">bool __fastcall TMain::SendTrueKeystroke(int ScanCode)
{
        // Pointer ist auf 0x0000001C 
        int *BufferPointer = (int *)0x0000001C;
        Label1-&gt;Caption = &quot;BufferPointer: &quot; + IntToStr(BufferPointer);

        // Pointer nach dem Schreiben
        int NewBufferPointer = *BufferPointer + 2;
        Label2-&gt;Caption = &quot;NewBufferPointer: &quot; + IntToStr(NewBufferPointer);

        // Startadresse Ringbuffer
        int *BufferPointerStart = (int *)0x00000080;
        Label3-&gt;Caption = &quot;BufferPointerStart: &quot; + IntToStr(BufferPointerStart);

        // Endadresse Ringbuffer
        int *BufferPointerEnd = (int *)0x00000082;
        Label4-&gt;Caption = &quot;BufferPointerEnd: &quot; + 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-&gt;Caption = &quot;BufferFull: &quot; + 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;
}
</code></pre>
<p>Aufruf:</p>
<pre><code class="language-cpp">SendTrueKeystroke(0x1C0D);
</code></pre>
<p>Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214757</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Mon, 22 Jan 2007 19:42:25 GMT</pubDate></item><item><title><![CDATA[Reply to In keyboard Buffer schreiben wird geblockt on Mon, 22 Jan 2007 22:51:43 GMT]]></title><description><![CDATA[<p>Wilder schrieb:</p>
<blockquote>
<p>Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?</p>
</blockquote>
<p>Indem du _nicht_ die WinAPI umgehst? Hier im Forum gibts übrigens auch leute die Tasten versenden .. hab irgendwo grad son Thread rumfliegen sehen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214860</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 22 Jan 2007 22:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to In keyboard Buffer schreiben wird geblockt on Mon, 22 Jan 2007 22:59:54 GMT]]></title><description><![CDATA[<p>Danke für den Tip</p>
<p>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).<br />
Ich kenne die Suchfunktion vom Forum auch... (musst also nicht ironisch schreiben :-D)</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214866</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Mon, 22 Jan 2007 22:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to In keyboard Buffer schreiben wird geblockt on Mon, 22 Jan 2007 23:42:51 GMT]]></title><description><![CDATA[<p>Wilder schrieb:</p>
<blockquote>
<p>Beim Ausführen kommt jetzt natürlich eine Zugriffsverletzung. Wie kann ich diese umgehen?</p>
</blockquote>
<p>Falls Dein BS eine MS-Windows-Version ist, dann garnicht.</p>
<p>Unter den genannten Adressen (0x0000001C, 0x00000080, 0x00000082, 0x0000001A) befindet sich nichts.</p>
<p>Deshalb wirken sie wie &quot;Null-Pointer&quot; und verursachen eine Schutzverletzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214879</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 22 Jan 2007 23:42:51 GMT</pubDate></item></channel></rss>