C ++ SendMessage / PostMessage WM_KEYDOWN WM_KEYUP不起作用

时间:2013-12-30 00:05:37

标签: c++ sendmessage postmessage findwindow

我正在尝试按左箭头键和右箭头键。
我传入的窗口句柄是正确的。 (见下面的截图)

当我按左/右键时,我使用Microsoft Spy ++找出正确的PostMessage。

以下是显示lParamWParam

的屏幕截图

前2个屏幕截图为VK_RIGHTWM_KEYDOWN& WM_KEYUP
接下来的2个屏幕截图为VK_LEFTWM_KEYDOWN& WM_KEYUP

postmessage 1 postmessage 2 postmessage 3 postmessage 4

以下是我尝试使用它的代码,通过按NUMPAD1,2,3来测试VK_LEFT OR VK_RIGHT是否有效..(它们都不起作用)。

gKey(VK_NUMPAD1) //crap testing
        {
            windowHandle = FindWindow(L"SSClientMainWndClass", NULL);
            printf("window handle = %x\n", windowHandle);
            PostMessage(windowHandle, WM_KEYDOWN, VK_RIGHT, 0x414D0001);
            //Sleep(1000);
            PostMessage(windowHandle, WM_KEYUP, VK_RIGHT, 0xC14D0001);
            Sleep(1000);

        }
gKey(VK_NUMPAD2) //crap testing
        {
            windowHandle = FindWindow(L"SSClientMainWndClass", NULL);
            printf("window handle = %x\n", windowHandle);
            PostMessage(windowHandle, WM_KEYDOWN, VK_LEFT, 0x414B0001);
            Sleep(1000);
            PostMessage(windowHandle, WM_KEYUP, VK_LEFT, 0xC14B0001);
            Sleep(1000);
        }

code

以下是在游戏中按VK_NUMPAD1的屏幕截图。 (Post消息被发送到正确的窗口,信息似乎正确!) [postmessage 1 postmessage 2

1 个答案:

答案 0 :(得分:0)

也许您需要以管理员身份运行您的程序,您无法将输入发送到比您的进程更高的进程。我使用了 keybd_event() 并且它总是对我有用,并提到 Home/End 需要 KEYEVENTF_EXTENDEDKEY。

我知道这是旧的,但我正在寻找类似的东西,但发现没有答案。