VK_TAB在我的 c++ 程序中无法在 SendInput() 中工作

VK_TAB is not working in SendInput() in my c++ Programe

本文关键字:工作 SendInput 程序 TAB 我的 c++ VK      更新时间:2023-10-16

我正在处理一个项目,我正在使用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));`

除了INPUTVK_TAB钥匙外,它工作正常。我想VK_TAB命令发送到应用程序。

但它没有按预期工作,即即使在成功完成SendInput()后,下一个控件也没有集中注意力。

谁能帮我解决这个问题。如何专注于其他应用程序的下一个控制?

提前谢谢你。

如果您

只是发送简单的密钥,请不要使用 KEYEVENTF_UNICODE 进行dwFlags。将 dwFlags 设置为 0 表示"按下"过渡,并将其设置为 KEYEVENTF_KEYUP 进行 KeyUp 过渡。

您忘记为V SendInput KeyUp 过渡,为VK_TAB

使用这种代码。

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 ) );