2016-07-09 9 views
0

Итак, я пытаюсь сделать программу, которая отправляет строку нажатий клавиш в открытое в настоящее время окно, и всякий раз, когда я запускаю код, он не отправляет все, что я хочу, чтобы он посылал, он посылает что-то совершенно другое (т.е. отправляет боб придумывает, как 22 или 2/2)Строки SendInput?

#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; 
} 

(простите ужасное форматирование)

+0

Хорошо, почему вы написали 'sizeof (INPUT)' вместо 'bob.size()'? –

+0

, потому что я искал поиск неисправностей, когда использовал bob.size(), я снова получил другой текст. – MrBleach

+0

@LightnessRacesinOrbit на самом деле нет, извините, при использовании bob.size() он не отправил ввод текста вообще. – MrBleach

ответ

2

виртуальные коды клавиш обычно не соответствуют ASCII алфавита.

Если вы читаете, например, this MSDN reference for virtual key-codes вы увидите, что, например, нижний регистр 'a' (который имеет ASCII значение 0x61) соответствует VK_NUMPAD1, который является ключом 1 на цифровой клавиатуре.

Письма в верхнем регистре ASCII соответствуют соответствующим кодам виртуальных клавиш, поэтому при назначении bob[i].ki.wVk вам необходимо сделать все буквы в верхнем регистре. Для всех других символов и символов вам нужно перевести символ в код виртуального ключа.