Kann mir jemand den Quellentext erklären ?
-
Ich habe im Internet eine Quellendatei gefunden die Tasten Simuliert in Windows
Das was ich nicht verstehe habe ich Makiert. Kann mir jemand erklären was hier passiert ?
#include "vkey.h" void VKey::send(std::string msg) { for(std::size_t i=0;i<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); // <- ????????? } else keybd_event(VkKeyScan( buffer ),0,0,0); } } bool VKey::no_letter_or_number(char letter) { if(letter == '!' || letter == '"' || letter == '§' || letter == '$' || letter == '%' || letter == '&' || letter == '/' || letter == '(' || letter == ')' || letter == '=' || letter == '?' || letter == '>' || letter == ';' || letter == ':' || letter == '_' || letter == '*' || letter == '°') return true; if(letter == std::string("'")[0]) // <- ?????????? return true; return false; } bool VKey::capital_letter(char letter) { if(letter>0x40 && letter<0x5B) // <- ?????????? return true; return false; }
-
Sleep(100); //Warum hier Sleep ???Weil die coolen Programme alle langsam sind.
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); // <- ?????????Winapiforum
if(letter == std::string("'")[0]) // <- ??????????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.
if(letter>0x40 && letter<0x5B) // <- ??????????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.
-
also,
Sleep ist eine blockierende WINAPI Funktion zum warten. Hättest du googlen können.
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);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
char's geprüft, ob er größer 64 und kleiner 95 ist. Den kannst du googlen.1. Sieht ein kleines bissel nach schlechtem Code aus, denn z.B.
if(letter>0x40 && letter<0x5B) // <- ?????????? return true; return false;ist
return letter >= 'A' && letter <= 'Z';2. Ist WINAPI und nicht C++ (oder reines Standard-C++)
3. Und das hättest du googlen können.Edit: Zeile 30 bis 33
ist blöd!! Da kann man doch einfach eineinitializer_listmit den Buchstaben füllen und eine<algorithm>-funktion benutzen um auf Gleichheit zu prüfen, z.B.remove_ifmit einem Lambda und dann Größe > 0 prüfen.
-
Hacker schrieb:
Edit: Zeile 30 bis 33
ist blöd!! Da kann man doch einfach eineinitializer_listmit den Buchstaben füllen und eine<algorithm>-funktion benutzen um auf Gleichheit zu prüfen, z.B.remove_ifmit einem Lambda und dann Größe > 0 prüfen.Dein Vorschlag ist blöd!
Da kann man doch einfachreturn strchr("!\"§$%&/()=?>;:_*°'", c)schreiben.Zeile 35 ist wirklich witzig, der Autor muss wohl einen Weg gesucht haben, ' als Character zu schreiben. std::string("'")[0] geht zwar, "'"'[0] geht aber genauso und '\'' geht noch besser. Dieser Fall ist oben in meinem return-Ausdruck schon verarbeitet.
-
Hacker schrieb:
Edit: Zeile 30 bis 33
ist blöd!! Da kann man doch einfach eineinitializer_listmit den Buchstaben füllen und eine<algorithm>-funktion benutzen um auf Gleichheit zu prüfen, z.B.remove_ifmit einem Lambda und dann Größe > 0 prüfen.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 <locale> nimmt.
bb
-
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.
-
Hacker schrieb:
Edit: Zeile 30 bis 33
ist blöd!! Da kann man doch einfach eineinitializer_listmit den Buchstaben füllen und eine<algorithm>-funktion benutzen um auf Gleichheit zu prüfen, z.B.remove_ifmit einem Lambda und dann Größe > 0 prüfen.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.

-
hustbaer schrieb:
Hacker schrieb:
Edit: Zeile 30 bis 33
ist blöd!! Da kann man doch einfach eineinitializer_listmit den Buchstaben füllen und eine<algorithm>-funktion benutzen um auf Gleichheit zu prüfen, z.B.remove_ifmit einem Lambda und dann Größe > 0 prüfen.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.

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.
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.
Edit²: Oder PI! Der macht doch immer sowas, oder?
-
usernetz schrieb:
if(msg[i]==msg[i-1]) Sleep(100); //Warum hier Sleep ???Eventuell werden die beiden Tastendrücke sonst nicht separat, sondern als ein einzelner Tastendruck aufgefasst.
-
else if(no_letter_or_number(buffer) || capital_letter(buffer))
Logischer Unsinn.
-
Ethon schrieb:
else if(no_letter_or_number(buffer) || capital_letter(buffer))
Logischer Unsinn.
Nein, perfekt logisch.
Denk dir statt "no_letter_or_number" einfach "special".
if (special || capital_letter)
Was ist da jetzt logisch unsinnig?
-
Hacker schrieb:
Edit²: Oder PI! Der macht doch immer sowas, oder?
Ich frickle nur Sprachfeatures mit Makros nach -> falsche Baustelle