PostMessage / SendMessage without interference from modifier keys

847 views Asked by At

I'm trying to post/send a message to some hwnd without the interference from modifier keys (ctrl, alt, shift).

Basically i want to send F1 message (without ctrl) to hwnd while im pressing ctrl (like Example 2) but with SendMessage\PostMessage.

I tried use SendInput to set up the CTRL key, post the message and set down the CTRL key back, but it fails 50% of time.

Example 1: Code with 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
}

Theoretically this code would solve the problem, but it sometimes sends the message with the CTRL pressed and sometimes not.

Example 2: Same code with SendInput (but these works fine)

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

There are 0 answers