0

我正在尝试在不受修饰键(ctrl、alt、shift)干扰的情况下向某个 hwnd 发布/发送消息。

基本上我想在按下 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
}
4

0 回答 0