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

时间:2019-08-01 17:18:17

标签: c++ winapi

WM_KEYUPPostMessage中的

SendMessage不起作用

我尝试将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_KEYDOWNWM_KEYUP发送到具有PostMessageSendMessage的应用程序,但WM_KEYUP不起作用的应用程序

1 个答案:

答案 0 :(得分:0)

正如@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的值可控制键的向上和向下状态。