我正在编写一个程序来将击键发送到另一个窗口,并且一切正常,但我必须上网并找到一个函数来完成击键部分本身。它有效,但我不知道它实际上在做什么。有人可以评论这个函数的每一行来解释它在做什么吗?
void GenerateKey(int vk, BOOL bExtended) {
KEYBDINPUT kb = {0};
INPUT Input = {0};
/* Generate a "key down" */
if (bExtended) { kb.dwFlags = KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
/* Generate a "key up" */
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags = KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
return;
}
这是一个调用它的例子:
GenerateKey('C', FALSE); // Sends keystroke 'c'
这会发送击键“c”。
此功能仅适用于大写字母,并且似乎仅适用于特定的十六进制代码。例如,要发送回车(回车键),调用如下:
GenerateKey(0x0D, FALSE); // Sends carriage return
但是,如果我尝试使用其中任何一个调用发送问号(十六进制 0x3F),则不会发生任何事情:
GenerateKey(0x3F, FALSE); // Nothing happens
GenerateKey('?', FALSE); // Nothing happens
谁能明白为什么这些不起作用?
另外,有人可以解释第二个参数 BOOL bExtended 的用途吗?在 TRUE 和 FALSE 之间切换似乎对其发送的击键没有影响。