你能解释一下 C++ 的每一行是什么吗?函数是做什么的?它发送击键,但我对如何发送击键感到困惑
我正在编写一个程序将击键发送到另一个窗口,并且一切正常,但我必须上网并找到一个函数来完成击键部分本身。它有效,但我不知道它实际上在做什么。有人可以评论这个函数的每一行来解释它在做什么吗?
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 之间进行更改似乎对其发送的击键没有影响。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的
GenerateKey
函数在内部使用 Win32 API 中的SendInput
函数,该函数合成键盘输入。您可以通过阅读 该函数的 MSDN 文档。
vk
参数是一个虚拟键码,列出此处。如果
bExtended
参数为TRUE
,则设置KEYEVENTF_EXTENDEDKEY
标志,根据 文档 表示“扫描代码前面有一个前缀字节,其值0xE0(224)”。Your
GenerateKey
function makes internal use of theSendInput
function from the Win32 API, which synthesizes keyboard input.You can find all of the information you need to understand how that function works and how to call it by reading the MSDN documentation for that function.
The
vk
parameter is a virtual key code, listed here.If the
bExtended
parameter isTRUE
, then theKEYEVENTF_EXTENDEDKEY
flag is set, which according to the documentation means that "the scan code was preceded by a prefix byte that has the value 0xE0 (224)".