SendInput不发送
问题描述:
我有类似的东西字符或数字:SendInput不发送
void generateKeybdEvent(int vk, bool extended) {
KEYBDINPUT kb = {0};
INPUT Input = {0};
if (extended)
kb.dwFlags = KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags = KEYEVENTF_KEYUP;
if (extended)
kb.dwFlags |= KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
}
当我送输入 'A',大小写锁定, 'A':
generateKeybdEvent ('A', false);
generateKeybdEvent (VK_CAPITAL, true);
generateKeybdEvent ('A', false);
的唯一影响是我的号码锁切换。
为什么我不能发送字符或数字到应用程序?
注意我正在使用带有波兰键盘布局的Windows 7和带有MinGW的Qt。
答
VK_CAPITAL
不是扩展密钥。
密钥被扩展,如果(vk >= 33 && vk <= 46) || (vk >= 91 && vk <= 93)
。
也ZeroMemory
可以省略,所以你的函数看起来是这样的:
KEYBDINPUT kb = {0};
INPUT Input = {0};
if ((vk >= 33 && vk <= 46) || (vk >= 91 && vk <= 93))
kb.dwFlags = KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
kb.dwFlags |= KEYEVENTF_KEYUP;
SendInput(1, &Input, sizeof(Input));
而且最重要的一点:问题可能不在此功能。我猜这个输入是发送的,但发送到了错误的窗口。使用SetFocus函数来指示此输入(在您致电SendInput之前调用它)。
您还应该检查SendInput on pinvoke.net