PostMessage / SendMessage без помех от клавиш-модификаторов - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь отправить / отправить сообщение на некоторый hwnd без вмешательства клавиш-модификаторов (ctrl, alt, shift).

В основном я хочу отправить сообщение F1 (без ctrl) на hwnd, покаЯ нажимаю Ctrl (как в Примере 2), но с SendMessage \ PostMessage.

Я пытался использовать 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
}
...