PostMessage / SendMessage,不受修饰键的干扰

时间:2019-09-28 00:06:06

标签: c++ sendmessage postmessage sendinput modifier-key

我正在尝试将消息发布/发送到某些hwnd,而不受修饰键(Ctrl,Alt,Shift)的干扰。

基本上我想在按Ctrl时(例如示例2)但使用SendMessage \ PostMessage将F1消息(无ctrl)发送到hwnd。

我尝试使用SendInput设置CTRL键,发布消息并将CTRL键放回原处,但失败了50%。

示例1:带有SendMessageA的代码:

HWND hwnd = FindWindowA(0, "Notepad");
if (GetKeyState(VK_CONTROL) < -1) // if CTRL is pressed
{
 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // up the CTRL key
 SendMessageA(hwnd, WM_KEYDOWN, VK_F1, 0); // send F1 keydown
 keybd_event(VK_CONTROL, 0, 0, 0); // down the CTRL key
}
else
{
 SendMessageA(hwnd, WM_KEYDOWN, VK_F1, 0); // send F1 keydown
}

从理论上讲,此代码可以解决问题,但有时会在按下CTRL的情况下发送消息,有时却没有。

示例2:与SendInput相同的代码(但可以正常工作)

HWND hwnd = FindWindowA(0, "Notepad");
if (GetKeyState(VK_CONTROL) < -1) // if CTRL is pressed
{
 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // up the CTRL key
 keybd_event(VK_F1, 0, 0, 0); // send F1 keydown
 keybd_event(VK_CONTROL, 0, 0, 0); // down the CTRL key back
}
else
{
 keybd_event(VK_F1, 0, 0, 0); // send F1 keydown
}

0 个答案:

没有答案