如果WM_KEYDOWN起作用,为什么WM_KEYUP不起作用?

Why WM_KEYUP doesn't work, if WM_KEYDOWN does?

本文关键字:WM KEYUP 不起作用 为什么 起作用 KEYDOWN 如果      更新时间:2023-10-16

PostMessage中的 WM_KEYUPSendMessage不起作用

我尝试将ASCII代码从0x57更改为0x005701,因为我的朋友说应该可以使用,但行不通。

#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_KEYDOWN的应用程序,然后使用WM_KEYUP进行PostMessageSendMessage的应用程序,但WM_KEYUP不起作用

as @david heffernan说,sendInput可以做到这一点。

这是最少的代码。

#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的值以控制密钥的上下状态。