所以我一直在尝试制作一个程序,将一串击键发送到当前打开的窗口,每当我运行代码时,它都不会发送我想要的任何内容发送它发送的东西完全不同(即发送bob为22或2/2)
#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 :(得分:2)
虚拟键码通常不对应ASCII字母。
如果您阅读例如this MSDN reference for virtual key-codes你会看到,例如小写'a'
(ASCII值0x61
)对应VK_NUMPAD1
,这是数字键盘上的1
键。
大写的ASCII字母确实对应于正确的虚拟键码,因此在分配给bob[i].ki.wVk
时,您需要将所有字母设为大写字母。对于所有其他符号和字符,您需要将字符转换为虚拟键代码。