[英]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.