如何在 C++ 中将 keydown 事件发送到 inactive window?

How to send keydown event to inactive window in C++?

[C++] 如何将 keydown 事件发送到非活动 window?

TAB 键工作正常。但是我在使用 "Z" 等其他键时遇到了问题。谷歌搜索了一段时间,但到目前为止还没有找到解决方案。

虚拟键 0x5A 应该是字母 Z 的正确键。

#include <iostream>
#include <Windows.h>
#include <string>

LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name
HWND hWindowHandle = FindWindow(NULL,Target_window_Name);

int main()
{
   //send TAB DOWN - WORKS FINE
   SendMessage(hWindowHandle,WM_KEYDOWN,0x09,0);
   //send TAB DOWN
   SendMessage(hWindowHandle,WM_KEYUP,0x09,0);

   //send Z DOWN - NOT WORKING
   SendMessage(hWindowHandle,WM_KEYDOWN,0x5A,0);
   //send Z UP
   SendMessage(hWindowHandle,WM_KEYUP,0x5A,0);

   return(0);
}

PS 我要执行的操作需要 Keydown 和 Up 事件。 试过从几个地方搜索,但到目前为止我还没有找到解决方案。

好的。当您按 Z 键时,使用 Spy++ 和记事本接收的挂钩消息。这样你就可以 simulate/emulate 完全相同的东西,所以它看起来就像用户按下 Z 键一样。 另外你需要在记事本中找到Editclass来发送消息。 所以我这样做了,我 运行 Spy++,钩住消息,并写了同样的东西。现在有效了:

#include <windows.h>
#include <iostream>
#include <string>



int main()
{
    LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name
    HWND hWindowHandle = FindWindow(NULL,Target_window_Name);
    HWND EditClass = FindWindowEx(hWindowHandle, NULL, "Edit", NULL);

    SendMessage(EditClass,WM_KEYDOWN,0x5A,0x002C0001);
    SendMessage(EditClass,WM_CHAR,0x7A,0x002C0001);
    SendMessage(EditClass,WM_KEYUP,0x5A,0xC02C0001);

   return(0);
}