关于 c :为什么 WM_KEYUP 不起作用,如果 WM_KEYDOWN 起作用?

Why WM_KEYUP doesn't work, if WM_KEYDOWN does?

PostMessageSendMessage 中的

WM_KEYUP 不起作用

我尝试将 ASCII 代码从 0x57 更改为 0x005701,因为我的朋友说它应该可以工作,但它没有。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>

using namespace std;

int KEY_DOWN = 0x57;

int main()
{
    HWND hwnd;
    if (!(hwnd = FindWindow(L"AAAA", NULL))) {
        cout <<"Couldn't find window";
    }
    else {
        Sleep(5000);
        PostMessage(hwnd, WM_SETFOCUS, NULL, NULL);
        PostMessage(hwnd, WM_KEYDOWN, KEY_DOWN, NULL);
    }
}

我想制作一个应用程序,它将 WM_KEYDOWNWM_KEYUP 发送到具有 PostMessageSendMessage 的应用程序,但 WM_KEYUP 不起作用


正如@David Heffernan 所说,SendInput 可以做到这一点。

这是最少的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    HWND hwnd;
    INPUT input[2];
    memset(input, 0, sizeof(input));
    if (!(hwnd = FindWindow(L"AAAA", NULL)))
    {
        cout <<"Couldn't find window";
    }
    else
    {
        Sleep(5000);
        input[0].type = input[1].type = INPUT_KEYBOARD;

        SetForegroundWindow(hwnd);

        input[0].ki.wVk = 'W';
        input[0].ki.dwFlags = 0;
        input[1].ki.wVk = 'W';
        input[1].ki.dwFlags = KEYEVENTF_KEYUP;
        SendInput(2, input, sizeof(INPUT));
    }

    return 0;
}

将按键按下和按键按下事件放入长度为 2 的数组中,并将它们作为
单个原子单位。

设置ki.dwFlags的值来控制按键的上下状态。