2016-07-09 24 views
0

Also habe ich versucht, ein Programm zu machen, das eine Reihe von Tastenanschlägen an das gerade geöffnete Fenster sendet und wenn ich den Code ausführe, sendet es nicht, was ich will, sendet es etwas völlig anderes (zB Senden bob kommt als 22 oder 02.02 bis)SendInput-Zeichenfolgen?

#include <iostream> 
#include <vector> 
#include <Windows.h> 


int SendKeys(const std::string &msg); 

int main() { 
Sleep(5); 
while(true) { 
     Sleep(500); 
     SendKeys("iajsdasdkjahdjkasd"); 
} 
     std::cin.get(); 
return 0; 
} 


int SendKeys(const std::string & msg) 
{ 
    std::vector<INPUT> bob(msg.size()); 

for(unsigned int i = 0; i < msg.size(); ++i) 
{ 
    bob[i].type = INPUT_KEYBOARD; 
    bob[i].ki.wVk = msg[i]; 
    std::cout << bob[i].ki.wVk << std::endl; 
    auto key = SendInput(1, &bob[i], sizeof(INPUT) /* *bob.size() */); 


} 
    return 0; 
} 

(die schreckliche Formatierung) vergeben

+0

Nun, warum hast du 'sizeof (INPUT)' anstelle von 'bob.size()' geschrieben? –

+0

weil ich eine Fehlersuche hatte, habe ich bei der Verwendung von bob.size() wieder einen anderen Text bekommen. – MrBleach

+0

@LightnessRacesinOrbit eigentlich nein, sorry, bei der Verwendung von bob.size() hat es überhaupt keine Texteingabe gesendet. – MrBleach

Antwort

2

die virtuellen Tastencodes im allgemeinen entsprechen nicht das ASCII-Alphabet.

Wenn Sie z.B. this MSDN reference for virtual key-codes werden Sie sehen, dass z.B. Kleinbuchstaben 'a' (die ASCII Wert 0x61 hat) entspricht VK_NUMPAD1 das ist die 1 Taste auf der numerischen Tastatur.

Die Großbuchstaben ASCII entsprechen den korrekten virtuellen Tastencodes. Daher müssen Sie alle Großbuchstaben eingeben, wenn Sie bob[i].ki.wVk zuweisen. Für alle anderen Symbole und Zeichen müssen Sie das Zeichen in den virtuellen Schlüsselcode übersetzen.