<?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[Probleme mit der Simulation von Tastatureingaben]]></title><description><![CDATA[<p>Hallo,<br />
das ist mein erster Beitrag hier und ich hoffe, dass ich die richtige Kategorie getroffen habe...</p>
<p>Ich habe bei folgendem kleinen Programm Probleme:</p>
<p>Die Idee:<br />
Bei Windows gibt es ja die praktische Tastenkombination &quot;Steuerung + Umschalttaste (Shift) + linke/rechte Pfeiltaste&quot;, die ein ganzes Wort bis zum nächsten Leerzeichen markiert. Die wollte ich mir zunutze machen und ein kleines Programm schreiben, dass in jedem beliebigen offenen Fenster automatisch einzelne Wörter markiert und kopiert, in dem das Kopieren möglich ist.</p>
<p>Der Code:</p>
<pre><code class="language-cpp">//(...)

//Klicken
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

//Warten
Sleep(250);

//Steuerungs- und Hochschalttaste, dann linke Pfeiltaste drücken
keybd_event(VK_SHIFT, 0, 0, NULL);
keybd_event(17, 0, 0, 0);
keybd_event(39, 0, 0, 0);

//Warten
Sleep(1000);

//Steuerungs- und Hochschalttaste loslassen
keybd_event(VK_SHIFT, 0, 0x02, NULL);
keybd_event(17, 0, 0x02, 0);
keybd_event(39, 0, 0x02, 0);

(...)
</code></pre>
<p>Das soll das Programm machen:<br />
Zuerst setzt das Programm durch Simulation eines Mausklicks den Cursor an den Wortanfang, dann simuliert es die Tastencombination &quot;Steuerung + Shift + rechte Pfeiltaste&quot;, um das nächste Wort bis zum nächsten Leerzeichen zu markieren. Das ganze wird dann kopiert usw.</p>
<p>Das macht das Programm:<br />
Es funktioniert alles prächtig bis auf das Simulieren der Shift-Taste. Der Cursor wird gesetzt, dann wird allerings nur die Tastenkombination &quot;Steuerung + rechte Pfeiltaste&quot; ausgeführt, was einen Sprung zum nächsten Wort bewirkt, allerdings ohne jegliche Markierung. Daraus schließe ich, dass die Shift-Taste nicht gedrückt wurde...</p>
<p>Warum klappt die Simulation des Drückens der Shift-Taste nicht, der Rest geht doch auch ?<br />
Ist das Ganze überhaupt ein sinnvoller Ansatz (mit keybd_event) oder sollte ich lieber anders an die Sache rangehen ?</p>
<p>Das wäre meine Hauptfragen, ich bin aber offen für alles, was das Programm zum Laufen bringt...<br />
Ich bin noch ziemlicher Anfänger in C/C++ und will gar nicht auf eine reine und hocheffektive Programmierung hinaus, es soll nur gehen...</p>
<p>Nebenbei, das Sleep ist auch noch ein kleines Problem:<br />
Wenn ich das Programm beenden will, während Sleep läuft, reagiert es natürlich nicht...<br />
Gibt es da eine bessere Funktion, die das Programm pausiert ?</p>
<p>Als Compiler benutze ich Borland C++ Builder 6...</p>
<p>Ich hoffe, ihr könnt mir helfen<br />
MfG<br />
payerror</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194863/probleme-mit-der-simulation-von-tastatureingaben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 06:50:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194863.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Oct 2007 15:50:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Thu, 11 Oct 2007 15:58:08 GMT]]></title><description><![CDATA[<p>Hallo,<br />
das ist mein erster Beitrag hier und ich hoffe, dass ich die richtige Kategorie getroffen habe...</p>
<p>Ich habe bei folgendem kleinen Programm Probleme:</p>
<p>Die Idee:<br />
Bei Windows gibt es ja die praktische Tastenkombination &quot;Steuerung + Umschalttaste (Shift) + linke/rechte Pfeiltaste&quot;, die ein ganzes Wort bis zum nächsten Leerzeichen markiert. Die wollte ich mir zunutze machen und ein kleines Programm schreiben, dass in jedem beliebigen offenen Fenster automatisch einzelne Wörter markiert und kopiert, in dem das Kopieren möglich ist.</p>
<p>Der Code:</p>
<pre><code class="language-cpp">//(...)

//Klicken
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

//Warten
Sleep(250);

//Steuerungs- und Hochschalttaste, dann linke Pfeiltaste drücken
keybd_event(VK_SHIFT, 0, 0, NULL);
keybd_event(17, 0, 0, 0);
keybd_event(39, 0, 0, 0);

//Warten
Sleep(1000);

//Steuerungs- und Hochschalttaste loslassen
keybd_event(VK_SHIFT, 0, 0x02, NULL);
keybd_event(17, 0, 0x02, 0);
keybd_event(39, 0, 0x02, 0);

(...)
</code></pre>
<p>Das soll das Programm machen:<br />
Zuerst setzt das Programm durch Simulation eines Mausklicks den Cursor an den Wortanfang, dann simuliert es die Tastencombination &quot;Steuerung + Shift + rechte Pfeiltaste&quot;, um das nächste Wort bis zum nächsten Leerzeichen zu markieren. Das ganze wird dann kopiert usw.</p>
<p>Das macht das Programm:<br />
Es funktioniert alles prächtig bis auf das Simulieren der Shift-Taste. Der Cursor wird gesetzt, dann wird allerings nur die Tastenkombination &quot;Steuerung + rechte Pfeiltaste&quot; ausgeführt, was einen Sprung zum nächsten Wort bewirkt, allerdings ohne jegliche Markierung. Daraus schließe ich, dass die Shift-Taste nicht gedrückt wurde...</p>
<p>Warum klappt die Simulation des Drückens der Shift-Taste nicht, der Rest geht doch auch ?<br />
Ist das Ganze überhaupt ein sinnvoller Ansatz (mit keybd_event) oder sollte ich lieber anders an die Sache rangehen ?</p>
<p>Das wäre meine Hauptfragen, ich bin aber offen für alles, was das Programm zum Laufen bringt...<br />
Ich bin noch ziemlicher Anfänger in C/C++ und will gar nicht auf eine reine und hocheffektive Programmierung hinaus, es soll nur gehen...</p>
<p>Nebenbei, das Sleep ist auch noch ein kleines Problem:<br />
Wenn ich das Programm beenden will, während Sleep läuft, reagiert es natürlich nicht...<br />
Gibt es da eine bessere Funktion, die das Programm pausiert ?</p>
<p>Als Compiler benutze ich Borland C++ Builder 6...</p>
<p>Ich hoffe, ihr könnt mir helfen<br />
MfG<br />
payerror</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1382985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1382985</guid><dc:creator><![CDATA[payerror]]></dc:creator><pubDate>Thu, 11 Oct 2007 15:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Thu, 11 Oct 2007 17:35:29 GMT]]></title><description><![CDATA[<p>Du mußt die Tasten in der umgekehrten Reihenfolge wieder loslassen (so wie du es selber ja auch machen würdest).<br />
Und 1 Sekunde zu warten brauchst du auch nicht dazwischen.(wenn dann reichen einige Millsekunden).<br />
Und beim BCB gibt es die Methode Application-&gt;ProcessMessages(), in der die Windows-Botschaften abgearbeitet werden (bzgl. Beenden des Programms).<br />
Statt Sleep kannst du dann folgende Methode verwenden:</p>
<pre><code class="language-cpp">void Wait(unsigned long nWait)
{
  unsigned long nSleep = 10; // &lt;- dieser Wert kann auch verändert werden
  unsigned long nCount = nWait/nSleep;

  for(unsigned int i=0; i&lt;nCount; i++)
  {
    Sleep(nSleep);
    Application-&gt;ProcessMessages();
  }
}
</code></pre>
<p>P.S. Statt der Magic Numbers würde ich auch besser VK_CONTROL und VK_LEFT verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383064</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 11 Oct 2007 17:35:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Fri, 12 Oct 2007 10:43:35 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-2.html" rel="nofollow">VCL/CLX (Borland C++ Builder)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383608</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 12 Oct 2007 10:43:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Fri, 12 Oct 2007 15:25:23 GMT]]></title><description><![CDATA[<p>Vielen Dank erstmal für die Antwort und auch, dass der Thread verschoben wurde...<br />
Dein Vorschlag funktioniert leider auch nicht, Th, aber ich habe eine andere Möglichkeit gefunden, die Wörter zu markieren: Mithilfe der Simulation der Mauseingabe...Das klappt...</p>
<p>Nur habe ich jetzt ein neues Problem: Ich will mit dem Befehl keybd_event einen &quot;.&quot;, ein &quot;/&quot; und einen &quot;:&quot; simulieren...<br />
Das geht irgendwie nicht, ich hab das einfach genauso gemacht wie bei Buchstaben, hier mal ein kleines Beispiel:</p>
<pre><code class="language-cpp">//Buchstabe: &quot;h&quot;
                keybd_event(72,0,0,0);
                keybd_event(72,0,0x02,0);
                Sleep(100);
                //Buchstabe: &quot;t&quot;
                keybd_event(84,0,0,0);
                keybd_event(84,0,0x02,0);
                Sleep(100);
                //Buchstabe: &quot;t&quot;
                keybd_event(84,0,0,0);
                keybd_event(84,0,0x02,0);
                Sleep(100);
                //Buchstabe: &quot;p&quot;
                keybd_event(80,0,0,0);
                keybd_event(80,0,0x02,0);
                Sleep(100);
                //Buchstabe: &quot;:&quot;
                keybd_event(58,0,0,0);
                keybd_event(58,0,0x02,0);
                Sleep(100);
                //Buchstabe: &quot;/&quot;
                keybd_event(47,0,0,0);
                keybd_event(47,0,0x02,0);
                Sleep(1000);
                //Buchstabe: &quot;/&quot;
                keybd_event(47,0,0,0);
                keybd_event(47,0,0x02,0);
                Sleep(100);
</code></pre>
<p>Das Problem sind die Sonderzeichen, die Buchstaben gehen...<br />
EDIT: Der Slash geht jetzt, nur der Punkt und der Doppelpunkt, die gehen nicht...</p>
<p>Vielen Dank im Voraus<br />
payerror</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383873</guid><dc:creator><![CDATA[payerror]]></dc:creator><pubDate>Fri, 12 Oct 2007 15:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Fri, 12 Oct 2007 16:20:26 GMT]]></title><description><![CDATA[<p>Die Funktion keybd_event() erwartet ja auch eine virtuelle Taste (VK), keinen ASCII-Code. Schau mal in der MSDN <a href="http://msdn2.microsoft.com/en-us/library/ms645540.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms645540.aspx</a></p>
<p>Was du suchst, ist wahrscheinlich VK_OEM_COMMA und VK_OEM_...</p>
<p>Vllt. solltest du dich erst mal mit einfacheren Programmieraufgaben beschäftigen, insbesondere nicht gleich mit komplizierten Win-API Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383941</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 12 Oct 2007 16:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Simulation von Tastatureingaben on Sat, 13 Oct 2007 14:12:24 GMT]]></title><description><![CDATA[<p>Vielen Dank, das hat mir sehr geholfen, ich war auch schon auf der Suche nach Virtuellen Tastencodes, hab aber immer bloß ein paar gefunden oder unvollständige Listen...</p>
<p>Danke, hier kann geschlossen werden<br />
MfG<br />
payerror</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384427</guid><dc:creator><![CDATA[payerror]]></dc:creator><pubDate>Sat, 13 Oct 2007 14:12:24 GMT</pubDate></item></channel></rss>