簡體   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