string einlesen und Tastendruck simulieren



  • MSDN schrieb:

    Note: This function has been superseded. Use SendInput instead.



  • Aber es muss doch auch anders funktionieren oder? 😮



  • Enitin schrieb:

    Aber es muss doch auch anders funktionieren oder? 😮

    Was ist denn das Problem mit SendInput?



  • Weil ich kein Stück von dem Code verstehe. 😃 Du kannst es mir ja erkären oder wenigstens einen funktionierenden Code schreiben. 🙄



  • Enitin schrieb:

    Also ich habe es schonmal so weit gebracht das ich eine Taste drücke mein Programm aber nicht den Fokus hat und er einen Buchstaben in z.b WordPad nach einem z.b F9 druck schreibt. Also scheint es möglich zu sein. Nur möchte ich einen String schreiben lassen. Das ist mein Problem.

    Na, da machst Du das, was Du nun für einen Buchstaben machst, mehrmals hintereinander für die verschiedenen Buchstaben Deines Strings ... 😕



  • Enitin schrieb:

    Weil ich kein Stück von dem Code verstehe. 😃 Du kannst es mir ja erkären oder wenigstens einen funktionierenden Code schreiben. 🙄

    Nur weil ich gerade nichts zu tun habe:

    void send_string(std::string str)
    {
    	std::vector<INPUT> inputs;
    	inputs.reserve(str.size() * 2);
    	for (auto c : str)
    	{
    		INPUT input;
    		input.type = INPUT_KEYBOARD;
    		input.ki.wVk = c;
    		input.ki.time = 0;
    		input.ki.dwExtraInfo = 0;
    
    		input.ki.dwFlags = 0;
    		inputs.push_back(input);
    
    		input.ki.dwFlags = KEYEVENTF_KEYUP;
    		inputs.push_back(input);
    	}
    	SendInput(inputs.size(), inputs.data(), sizeof(INPUT));
    }
    

    (ungetestet)
    Um es zu verstehen musst du wohl lernen Dokus zu lesen.



  • Danke für die Hilfe. Habs selber mit viel nachdenken geschafft. 😃 Aber jetzt ist mein Problem das er nicht mehr die nächste Zeile ausliest. Was ist falsch? 😞

    #include <iostream>
    #include <conio.h>
    #include <fstream>
    #include <string>
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    string Datei = "";
    string input = "";
    
    int Auswahl = 0;
    
    int main(){
    	for(;;){
    		system("color 0A");
    		cout << "Datei: ";
    		cin >> Datei;
    		cout << endl;
    
    		for(;;){
    			if(GetAsyncKeyState(VK_F6)){
    				fstream load;
    				load.open(Datei, ios::in);
    				while (!load.eof()){
    					getline(load, input);
    					cout << input << endl;
    
    					for(int i = 0; input[i] == 'a' || 'b' || 'c' || 'd' || 'e' || 'f' || 'g' || 'h' || 'i' || 'j' || 'k' || 'l' || 'm' || 'n' || 'o' || 'p' || 'q' || 'r' || 's' || 't' || 'u' || 'v' || 'w' || 'x' || 'y' || 'z' ||
    										   'A' || 'B' || 'C' || 'D' || 'E' || 'F' || 'G' || 'H' || 'I' || 'J' || 'K' || 'L' || 'M' || 'N' || 'O' || 'P' || 'Q' || 'R' || 'S' || 'T' || 'U' || 'V' || 'W' || 'X' || 'Y' || 'Z' ||
    										   '0' || '1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9'; i++){
    						switch(input[i]){
    						case 'a': keybd_event(0x41,0,0,0); break;
    						case 'b': keybd_event(0x42,0,0,0); break;
    						case 'c': keybd_event(0x43,0,0,0); break;
    						case 'd': keybd_event(0x44,0,0,0); break;
    						case 'e': keybd_event(0x45,0,0,0); break;
    						case 'f': keybd_event(0x46,0,0,0); break;
    						case 'g': keybd_event(0x47,0,0,0); break;
    						case 'h': keybd_event(0x48,0,0,0); break;
    						case 'i': keybd_event(0x49,0,0,0); break;
    						case 'j': keybd_event(0x4A,0,0,0); break;
    						case 'k': keybd_event(0x4B,0,0,0); break;
    						case 'l': keybd_event(0x4C,0,0,0); break;
    						case 'm': keybd_event(0x4D,0,0,0); break;
    						case 'n': keybd_event(0x4E,0,0,0); break;
    						case 'o': keybd_event(0x4F,0,0,0); break;
    						case 'p': keybd_event(0x50,0,0,0); break;
    						case 'q': keybd_event(0x51,0,0,0); break;
    						case 'r': keybd_event(0x52,0,0,0); break;
    						case 's': keybd_event(0x53,0,0,0); break;
    						case 't': keybd_event(0x54,0,0,0); break;
    						case 'u': keybd_event(0x55,0,0,0); break;
    						case 'v': keybd_event(0x56,0,0,0); break;
    						case 'w': keybd_event(0x57,0,0,0); break;
    						case 'x': keybd_event(0x58,0,0,0); break;
    						case 'y': keybd_event(0x59,0,0,0); break;
    						case 'z': keybd_event(0x5A,0,0,0); break;
    
    						case 'A': keybd_event(0x10,0,0,0); keybd_event(0x41,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'B': keybd_event(0x10,0,0,0); keybd_event(0x42,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'C': keybd_event(0x10,0,0,0); keybd_event(0x43,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'D': keybd_event(0x10,0,0,0); keybd_event(0x44,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'E': keybd_event(0x10,0,0,0); keybd_event(0x45,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'F': keybd_event(0x10,0,0,0); keybd_event(0x46,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'G': keybd_event(0x10,0,0,0); keybd_event(0x47,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'H': keybd_event(0x10,0,0,0); keybd_event(0x48,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'I': keybd_event(0x10,0,0,0); keybd_event(0x49,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'J': keybd_event(0x10,0,0,0); keybd_event(0x4A,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'K': keybd_event(0x10,0,0,0); keybd_event(0x4B,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'L': keybd_event(0x10,0,0,0); keybd_event(0x4C,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'M': keybd_event(0x10,0,0,0); keybd_event(0x4D,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'N': keybd_event(0x10,0,0,0); keybd_event(0x4E,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'O': keybd_event(0x10,0,0,0); keybd_event(0x4F,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'P': keybd_event(0x10,0,0,0); keybd_event(0x50,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'Q': keybd_event(0x10,0,0,0); keybd_event(0x51,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'R': keybd_event(0x10,0,0,0); keybd_event(0x52,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'S': keybd_event(0x10,0,0,0); keybd_event(0x53,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'T': keybd_event(0x10,0,0,0); keybd_event(0x54,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'U': keybd_event(0x10,0,0,0); keybd_event(0x55,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'V': keybd_event(0x10,0,0,0); keybd_event(0x56,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'W': keybd_event(0x10,0,0,0); keybd_event(0x57,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'X': keybd_event(0x10,0,0,0); keybd_event(0x58,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'Y': keybd_event(0x10,0,0,0); keybd_event(0x59,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    						case 'Z': keybd_event(0x10,0,0,0); keybd_event(0x5A,0,0,0); keybd_event(0x10, 0, KEYEVENTF_KEYUP, 0); break;
    
    						case '0': keybd_event('0',0,0,0); break;
    						case '1': keybd_event('1',0,0,0); break;
    						case '2': keybd_event('2',0,0,0); break;
    						case '3': keybd_event('3',0,0,0); break;
    						case '4': keybd_event('4',0,0,0); break;
    						case '5': keybd_event('5',0,0,0); break;
    						case '6': keybd_event('6',0,0,0); break;
    						case '7': keybd_event('7',0,0,0); break;
    						case '8': keybd_event('8',0,0,0); break;
    						case '9': keybd_event('9',0,0,0); break;
    						}
    
    						cout << input[i];
    						Sleep(500);
    					}
    					cout << endl;
    				}
    				load.close();
    				break;
    			}
    		}
    
    		cout << "\nWordlist am Ende!" << endl;
    		cout << "(F5) Neue Datei" << endl;
    		cout << "(ESC) Schliessen" << endl;
    
    		for(;;){
    			if(GetAsyncKeyState(VK_F6)){
    				system("cls");
    				break;
    			}
    			else if(GetAsyncKeyState(VK_ESCAPE)){
    				system("cls");
    				return 0;
    			}
    		}
    	}
    }
    


  • oh gott das hättest du in vielleicht 10 zeilen lösen können mit der STL und n bissl ascii-rechnerei



  • Haha. 😃 Wenigstens funktioniert es. :p Sag mir lieber was falsch daran ist. ^^ Warum die Datei nicht weiter ausgelesen wird.


  • Mod

    Deine Leselogik ist falsch. Du prüfst ja erst auf Fehler, dann versuchst du zu lesen, dann verarbeitest du blind die gelesenen Daten! Wie wäre es mit Lesen, prüfen ob erfolgreich, dann (und nur im Erfolgsfall!) verarbeiten?

    Das erklärt aber nicht deinen beschriebenen Fehler, da dieser Logikfehler sich hier erst am Ende des Streams äußern wird. Vermutung: Deine Fehlerbeschreibung ist halb geraten. Du beobachtest, dass das Programm nicht tut, was du denkst, was es tun soll und denkst, dass es an XYZ (hier: Programm liest nur eine Zeile) liegt, aber überprüft hast du es nicht. Nutze einen Debugger, um das Programmverhalten und den Verlauf Schritt für Schritt nach zu vollziehen. Sobald Programmablauf und deine Erwartungen nicht mehr übereinstimmen, kannst du mit dem Debugger die Gründe nachvollziehen.



  • Warum verwirren mich eure Antworten immer? 🙄 😕
    Wenn ihr nicht schon total genervt von mir seid dann bitte nochmal für dumme. :3



  • Starte das Programm mit einem Debugger und schau nach (in dem du z.B. das Programm zeilenweise durchläufst) wieso eine Endlosschleife entsteht.



  • Enitin schrieb:

    Warum verwirren mich eure Antworten immer? 🙄 😕

    Weil du nicht programmieren kannst.

    while (!load.eof()){
                        getline(load, input);
    
    // ==>
                    while (true){
                        getline(load, input);
                        if (!load)
                            break;
    

    Ohne Gewähr.


  • Mod

    Und das so unnötig umständlich ist, machen wir es auch noch einmal so vor, wie man es normalerweise macht (und wie es in deinem Lehrbuch (du hast doch eines?) hätte stehen sollen (dass dem nicht so ist, verheißt nichts Gutes)):

    while (getline(load, input))
    {
      // Verarbeitung von input
    }
    


  • ...


Anmelden zum Antworten