【问题标题】:VK_TAB is not working in SendInput() in my c++ ProgrameVK_TAB 在我的 C++ 程序中的 SendInput() 中不起作用
【发布时间】:2013-12-31 20:57:54
【问题描述】:

我正在处理一个项目,我使用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() 之后,下一个控件也没有获得焦点。

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

提前致谢。

【问题讨论】:

  • 您通过发送WM_NEXTDLGCTL 消息将焦点设置到对话框上的不同控件。

标签: c++ winapi


【解决方案1】:

如果您只是发送简单的密钥,请不要将KEYEVENTF_UNICODE 用于dwFlags。将 dwFlags 设置为 0 用于 KeyDown 转换,将其设置为 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 ) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多