我正在开发一个项目,我使用SendInput()
将粘贴命令发送到另一个应用程序窗口,如下所示:
`INPUT input, vButton, ctrl1, ctrl2;`
input.type = INPUT_KEYBOARD;
input.ki.wVk = VK_CONTROL;
input.ki.wScan = 0;
input.ki.dwFlags = KEYEVENTF_UNICODE ;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
vButton .type = INPUT_KEYBOARD;
vButton .ki.wVk = 0x56;
vButton .ki.wScan =0;
vButton .ki.dwFlags = KEYEVENTF_UNICODE ;
vButton .ki.time = 0;
vButton .ki.dwExtraInfo = 0;
ctrl1.type = INPUT_KEYBOARD;
ctrl1.ki.wVk = VK_CONTROL;
ctrl1.ki.wScan = 0;
ctrl1.ki.dwFlags = KEYEVENTF_KEYUP |KEYEVENTF_UNICODE ;
ctrl1.ki.time = 0;
ctrl1.ki.dwExtraInfo = 0;
ctrl2.type = INPUT_KEYBOARD;
ctrl2.ki.wVk = VK_TAB;
ctrl2.ki.wScan = 0;
ctrl2.ki.dwFlags = KEYEVENTF_KEYUP ;
ctrl2.ki.time = 0;
ctrl2.ki.dwExtraInfo = 0;
// Send Input To Another Window
::ShowWindow(mainHwnd, SW_SHOWNORMAL);
int retval = SendInput(1, &input, sizeof(INPUT));
retval = SendInput(1, &vButton, sizeof(INPUT));
retval = SendInput(1, &ctrl1, sizeof(INPUT));
retval = SendInput(1, &ctrl2, sizeof(INPUT));`
除了具有INPUT
密钥的VK_TAB
之外,它工作正常。我想发送VK_TAB
命令到应用程序。
但它没有按预期工作,即使成功完成SendInput()
后,下一个控件也没有得到关注。
任何人都可以帮助我。 我如何专注于其他应用程序的下一个控制?
先谢谢你。
答案 0 :(得分:3)
如果您只是发送简单的密钥,请不要将KEYEVENTF_UNICODE
用于dwFlags
。对于KeyDown转换,将dwFlags
设置为0,并将其设置为KEYEVENTF_KEYUP
以进行KeyUp转换。
您忘了SendInput
V
的KeyUp转换和VK_TAB
的KeyDown转换
使用那种代码。
INPUT input:
input.type = INPUT_KEYBOARD;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
input.ki.wScan = 0;
input.ki.dwFlags = 0;
// Ctrl Down
input.ki.wVk = VK_CONTROL;
SendInput( 1, &input, sizeof( INPUT ) );
// V Down
input.ki.wVk = 0x56;
SendInput( 1, &input, sizeof( INPUT ) );
// V Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );
// Ctrl Up
input.ki.wVk = VK_CONTROL;
SendInput( 1, &input, sizeof( INPUT ) );
// Tab Down
input.ki.wVk = VK_TAB;
input.ki.dwFlags = 0;
SendInput( 1, &input, sizeof( INPUT ) );
// Tab Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );