SendInput对C++不采取Ctrl和Shift帐户
问题描述:
我想击键发送CTRL + SHIFT + END 的控制,在Embarcadero公司编写的C++应用程序。我使用下面的代码:SendInput对C++不采取Ctrl和Shift帐户
tagINPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Appui sur Ctrl
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
// Appui sur Shift
ip.ki.wVk = VK_SHIFT;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
// Appui sur End
ip.ki.wVk = VK_END;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
Application->ProcessMessages();
// Relacher End
ip.ki.wVk = VK_END;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Relacher Shift
ip.ki.wVk = VK_SHIFT;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Relacher Ctrl
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
然而,就像如果有在CTRL任何动作SHIFT键似乎是工作。
我失踪了什么?
答
问题是,vk_End键是一个扩展键。所以,你应该在标志宣告本:
`eip.ki.dwFlags = 0;
ip.ki.wVk = VK_END;
ip.ki.dwFlags = 0;
ip.ki.dwFlags = ip.ki.dwFlags || 1;
SendInput(1, &ip, sizeof(INPUT));
Application->ProcessMessages();
// Relacher End
ip.ki.wVk = VK_END;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
ip.ki.dwFlags = ip.ki.dwFlags || 1;
SendInput(1, &ip, sizeof(INPUT));`
请注意,我用1设置标志,因为我不知道你有没有在你的C++定义一个常数,而是假定有一个恒定的某处。
+0
非常感谢,我敢打赌,这正是我需要的答案:)我会尽快尝试,并告诉它它是否有效(我认为它确实很好)。 –
sendinput不是标准C++的一部分,你应该在你的问题中包含更多的标签,如果你这样留下,你应该包含该sendinput函数的代码,但我猜你没有它,不是每个使用C++的人都使用Embarcadero。 – exs
说实话,我使用的是来自该项目的SendInput,附带在win32.h文件中。这是由不在我公司的其他人完成的,所以我不能给出任何准确的想法。 –
它用于合成击键 – Asesh