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键似乎是工作。

我失踪了什么?

+0

sendinput不是标准C++的一部分,你应该在你的问题中包含更多的标签,如果你这样留下,你应该包含该sendinput函数的代码,但我猜你没有它,不是每个使用C++的人都使用Embarcadero。 – exs

+0

说实话,我使用的是来自该项目的SendInput,附带在win32.h文件中。这是由不在我公司的其他人完成的,所以我不能给出任何准确的想法。 –

+0

它用于合成击键 – Asesh

问题是,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

非常感谢,我敢打赌,这正是我需要的答案:)我会尽快尝试,并告诉它它是否有效(我认为它确实很好)。 –