<?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[Kann mir jemand den Quellentext erklären ?]]></title><description><![CDATA[<p>Ich habe im Internet eine Quellendatei gefunden die Tasten Simuliert in Windows</p>
<p>Das was ich nicht verstehe habe ich Makiert. Kann mir jemand erklären was hier passiert ?</p>
<pre><code class="language-cpp">#include &quot;vkey.h&quot;

void VKey::send(std::string msg)
{
    for(std::size_t i=0;i&lt;msg.size();++i)
    {
        if(msg[i]==msg[i-1])
            Sleep(100);        //Warum hier Sleep ???

        char buffer = msg[i];

        if(buffer=='\n')
            keybd_event(VK_RETURN,0,0,0);
        else if(no_letter_or_number(buffer) || capital_letter(buffer))
        {
            keybd_event(VK_SHIFT,0,0,0);
            keybd_event(VkKeyScan( buffer ),0,0,0);
            keybd_event(VkKeyScan( buffer ),0,KEYEVENTF_KEYUP,0);
            keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);             // &lt;- ?????????
        }
        else
            keybd_event(VkKeyScan( buffer ),0,0,0);
    }
}

bool VKey::no_letter_or_number(char letter)
{
    if(letter == '!' || letter == '&quot;' || letter == '§' || letter == '$' || letter == '%' ||
       letter == '&amp;' || letter == '/' || letter == '(' || letter == ')' || letter == '=' ||
       letter == '?' || letter == '&gt;' || letter == ';' || letter == ':' || letter == '_' ||
       letter == '*' || letter == '°')
        return true;
    if(letter == std::string(&quot;'&quot;)[0])  // &lt;- ??????????
        return true;
    return false;
}

bool VKey::capital_letter(char letter)
{
    if(letter&gt;0x40 &amp;&amp; letter&lt;0x5B) // &lt;- ??????????
        return true;
    return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/299721/kann-mir-jemand-den-quellentext-erklären</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 04:18:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299721.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Feb 2012 18:35:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 18:35:57 GMT]]></title><description><![CDATA[<p>Ich habe im Internet eine Quellendatei gefunden die Tasten Simuliert in Windows</p>
<p>Das was ich nicht verstehe habe ich Makiert. Kann mir jemand erklären was hier passiert ?</p>
<pre><code class="language-cpp">#include &quot;vkey.h&quot;

void VKey::send(std::string msg)
{
    for(std::size_t i=0;i&lt;msg.size();++i)
    {
        if(msg[i]==msg[i-1])
            Sleep(100);        //Warum hier Sleep ???

        char buffer = msg[i];

        if(buffer=='\n')
            keybd_event(VK_RETURN,0,0,0);
        else if(no_letter_or_number(buffer) || capital_letter(buffer))
        {
            keybd_event(VK_SHIFT,0,0,0);
            keybd_event(VkKeyScan( buffer ),0,0,0);
            keybd_event(VkKeyScan( buffer ),0,KEYEVENTF_KEYUP,0);
            keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);             // &lt;- ?????????
        }
        else
            keybd_event(VkKeyScan( buffer ),0,0,0);
    }
}

bool VKey::no_letter_or_number(char letter)
{
    if(letter == '!' || letter == '&quot;' || letter == '§' || letter == '$' || letter == '%' ||
       letter == '&amp;' || letter == '/' || letter == '(' || letter == ')' || letter == '=' ||
       letter == '?' || letter == '&gt;' || letter == ';' || letter == ':' || letter == '_' ||
       letter == '*' || letter == '°')
        return true;
    if(letter == std::string(&quot;'&quot;)[0])  // &lt;- ??????????
        return true;
    return false;
}

bool VKey::capital_letter(char letter)
{
    if(letter&gt;0x40 &amp;&amp; letter&lt;0x5B) // &lt;- ??????????
        return true;
    return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2182028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182028</guid><dc:creator><![CDATA[usernetz]]></dc:creator><pubDate>Thu, 16 Feb 2012 18:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 18:44:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Sleep(100);        //Warum hier Sleep ???
</code></pre>
<p>Weil die coolen Programme alle langsam sind.</p>
<pre><code class="language-cpp">keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);             // &lt;- ?????????
</code></pre>
<p>Winapiforum</p>
<pre><code class="language-cpp">if(letter == std::string(&quot;'&quot;)[0])  // &lt;- ??????????
</code></pre>
<p>Weil derjenige, der dies schrieb keine Ahnung hatte. Das ist eine unendlich umstandliche Methode um letter auf Gleichheit mit '\'' zu vergleichen. Da wird ein temporärer String erstellt und von dem das erste Zeichen genommen. Der Schreiber kannte wohl keine Escapesequenzen.</p>
<pre><code class="language-cpp">if(letter&gt;0x40 &amp;&amp; letter&lt;0x5B) // &lt;- ??????????
</code></pre>
<p>0x40: Andere Schreibweise für 64, was um 1 kleiner ist als der Wert des Zeichens 'A' in gängigen Codierungen. Gleichfalls ist 0x5B gleich 91, was eins mehr ist als 'Z'. Es soll wohl geprüft werden, ob letter ein Großbuchstabe ist. Wieder hatte der Schreiber keine Ahnung und kannte wohl nicht isupper.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182032</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 16 Feb 2012 18:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 18:54:03 GMT]]></title><description><![CDATA[<p>also,</p>
<p>Sleep ist eine blockierende WINAPI Funktion zum warten. Hättest du googlen können.</p>
<pre><code class="language-cpp">keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
</code></pre>
<p>Das simuliert einen Key-Release der Shift-taste. Zeile 35 ist IMO völlig schwachsinnig. Und in Zeile 42 wird der ASCII-Code eines übergebenen <code>char</code> 's geprüft, ob er größer 64 und kleiner 95 ist. Den kannst du googlen.</p>
<p>1. Sieht ein kleines bissel nach schlechtem Code aus, denn z.B.</p>
<pre><code class="language-cpp">if(letter&gt;0x40 &amp;&amp; letter&lt;0x5B) // &lt;- ??????????
        return true;
    return false;
</code></pre>
<p>ist</p>
<pre><code class="language-cpp">return letter &gt;= 'A' &amp;&amp; letter &lt;= 'Z';
</code></pre>
<p>2. Ist WINAPI und nicht C++ (oder reines Standard-C++)<br />
3. Und das hättest du googlen können.</p>
<p>Edit: Zeile 30 bis 33<br />
ist blöd!! Da kann man doch einfach eine <code>initializer_list</code> mit den Buchstaben füllen und eine <code>&lt;algorithm&gt;</code> -funktion benutzen um auf Gleichheit zu prüfen, z.B. <code>remove_if</code> mit einem Lambda und dann Größe &gt; 0 prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182034</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 16 Feb 2012 18:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 19:36:29 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Edit: Zeile 30 bis 33<br />
ist blöd!! Da kann man doch einfach eine <code>initializer_list</code> mit den Buchstaben füllen und eine <code>&lt;algorithm&gt;</code> -funktion benutzen um auf Gleichheit zu prüfen, z.B. <code>remove_if</code> mit einem Lambda und dann Größe &gt; 0 prüfen.</p>
</blockquote>
<p>Dein Vorschlag ist blöd!<br />
Da kann man doch einfach <code>return strchr(&quot;!\&quot;§$%&amp;/()=?&gt;;:_*°'&quot;, c)</code> schreiben.</p>
<p>Zeile 35 ist wirklich witzig, der Autor muss wohl einen Weg gesucht haben, ' als Character zu schreiben. std::string(&quot;'&quot;)[0] geht zwar, &quot;'&quot;'[0] geht aber genauso und '\'' geht noch besser. Dieser Fall ist oben in meinem return-Ausdruck schon verarbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182050</guid><dc:creator><![CDATA[alternarius]]></dc:creator><pubDate>Thu, 16 Feb 2012 19:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 20:14:28 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Edit: Zeile 30 bis 33<br />
ist blöd!! Da kann man doch einfach eine <code>initializer_list</code> mit den Buchstaben füllen und eine <code>&lt;algorithm&gt;</code> -funktion benutzen um auf Gleichheit zu prüfen, z.B. <code>remove_if</code> mit einem Lambda und dann Größe &gt; 0 prüfen.</p>
</blockquote>
<p>so einfach kann das gehen. oder man nimmt den umständlichen weg: standard-funktionen um zu gucken, ob es eine zahl oder eine nummer ist... klingt jetzt eigentlich gar nicht mehr so umständlich - erst recht nicht mehr, wenn man std::isalnum aus &lt;locale&gt; nimmt.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182068</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 16 Feb 2012 20:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 20:44:40 GMT]]></title><description><![CDATA[<p>OMG, ich hab jetzt erst verstanden wofür diese Funktion da ist. Es ist einfach unglaublich, dass er nicht unskilled's Funktion genommen hat! Meine Güte, in diesem Fall ist Nicht-Prüfen völlig bescheuert. Ich dachte, er will einfach (aus einem unersichtlichen Grund) Den Buchstaben auf Gleichheit mit einem dieser Zeichen prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182079</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 16 Feb 2012 20:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 21:17:43 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Edit: Zeile 30 bis 33<br />
ist blöd!! Da kann man doch einfach eine <code>initializer_list</code> mit den Buchstaben füllen und eine <code>&lt;algorithm&gt;</code> -funktion benutzen um auf Gleichheit zu prüfen, z.B. <code>remove_if</code> mit einem Lambda und dann Größe &gt; 0 prüfen.</p>
</blockquote>
<p>Und vergiss nicht noch ein paar lexical_cast einzubauen. Bzw. vielleicht könntest du es vorher noch in ein File schreiben und wieder zurücklesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182087</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Feb 2012 21:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 21:36:28 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Edit: Zeile 30 bis 33<br />
ist blöd!! Da kann man doch einfach eine <code>initializer_list</code> mit den Buchstaben füllen und eine <code>&lt;algorithm&gt;</code> -funktion benutzen um auf Gleichheit zu prüfen, z.B. <code>remove_if</code> mit einem Lambda und dann Größe &gt; 0 prüfen.</p>
</blockquote>
<p>Und vergiss nicht noch ein paar lexical_cast einzubauen. Bzw. vielleicht könntest du es vorher noch in ein File schreiben und wieder zurücklesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Das Mindeste. Wo ist volkard? Ich brauche volkard! Der hätte jetzt Bock auf sowas. Wo ist der räudige alte volkard hin? Der war geil.</p>
<p>Edit: Ich bin sicher, ich muss beim Datei- Lesen und Schreiben chiffrieren, damit die Teile nicht abgefangen, und spezifisch verfälscht schnell zurück-überschrieben werden können.</p>
<p>Edit²: Oder PI! Der macht doch immer sowas, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182094</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 16 Feb 2012 21:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 22:11:00 GMT]]></title><description><![CDATA[<p>usernetz schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(msg[i]==msg[i-1])
            Sleep(100);        //Warum hier Sleep ???
</code></pre>
</blockquote>
<p>Eventuell werden die beiden Tastendrücke sonst nicht separat, sondern als ein einzelner Tastendruck aufgefasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182112</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 16 Feb 2012 22:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Thu, 16 Feb 2012 23:19:01 GMT]]></title><description><![CDATA[<blockquote>
<p>else if(no_letter_or_number(buffer) || capital_letter(buffer))</p>
</blockquote>
<p>Logischer Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182134</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 16 Feb 2012 23:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Fri, 17 Feb 2012 03:42:07 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<blockquote>
<p>else if(no_letter_or_number(buffer) || capital_letter(buffer))</p>
</blockquote>
<p>Logischer Unsinn.</p>
</blockquote>
<p>Nein, perfekt logisch.<br />
Denk dir statt &quot;no_letter_or_number&quot; einfach &quot;special&quot;.<br />
<code>if (special || capital_letter)</code><br />
Was ist da jetzt logisch unsinnig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182148</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Feb 2012 03:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand den Quellentext erklären ? on Fri, 17 Feb 2012 05:31:05 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Edit²: Oder PI! Der macht doch immer sowas, oder?</p>
</blockquote>
<p>Ich frickle nur Sprachfeatures mit Makros nach -&gt; falsche Baustelle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182153</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 17 Feb 2012 05:31:05 GMT</pubDate></item></channel></rss>