繁体   English   中英

键盘模拟失败

[英]Keyboard simulation fail

我正在制作一个程序,我需要它从数组中键入一个随机字母。 这就是我试图做到的方式:

{
srand ( time(NULL) );
WORD arrayNum[4] = {0x41, 0x42, 0x43, 0x44};
int RandIndex = rand() % 4;

INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = arrayNum; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT));
}

我必须说我对此很陌生,我真的不知道该怎么办。 我得到的错误是:

invalid conversion from 'WORD* {aka short unsigned int*}' to 'WORD {aka short unsigned int}' [-fpermissive]

这让我很困惑。

我认为这里的问题是这样的:

ip.ki.wVk = arrayNum;

在这里, wVk字段应该是代表要发送的虚拟键码的WORD 但是,您已经arrayNum分配了arrayNum ,它是WORD数组 根据您的代码,我认为您的意思是

ip.ki.wVk = arrayNum[RandIndex];

因为您没有在任何地方使用RandIndex 展望未来,我建议您将警告级别提高到最高水平,因为它可能会标记代码中未使用RandIndex

(此外,如果您确实对Stack Overflow提出了更多问题,请尝试包含有关错误消息的更多信息。我不得不查找文档来确定发生该特定错误的那一行。人们更容易地提供帮助如果他们可以看到发生错误的特定行。)

您应该将实际数组本身传递给wVk ,而不是传递数组的特定元素:

ip.ki.wVk = arrayNum[RandIndex]; 

话虽这么说,我建议在使用SendInput()发送文本字符时使用KEYEVENTF_UNICODE标志,不要使用虚拟键代码。 并且您应该在一次调用SendInput()传递2个INPUT结构,如建议的@IInspectable。 不要为每个INPUT两次调用SendInput() ,这会SendInput()使用SendInput()一些好处:

srand ( time(NULL) );
LPCWSTR chars = L"ABCD";
int RandIndex = rand() % 4;

INPUT ip[2];
memset(ip, 0, sizeof(ip));

ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = (WORD) chars[RandIndex]; 
ip[0].ki.dwFlags = KEYEVENTF_UNICODE;

memcpy(&ip[1], &ip[0], sizeof(INPUT));
ip[1].ki.dwFlags |= KEYEVENTF_KEYUP; 

SendInput(2, ip, sizeof(INPUT));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM