如何在C++中将keydown事件发送到非活动窗口

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

本文关键字:非活动 窗口 事件 keydown C++ 中将      更新时间:2023-10-16

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

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事件是我尝试做的事情所必需的。我试着从几个地方搜索,但到目前为止还没有找到解决方案。

好的。使用Spy++并在按下Z键时挂接Notepad收到的消息。通过这种方式,您可以模拟/模拟完全相同的东西,所以它看起来就像用户按下的Z键一样。此外,您还需要在记事本中找到Edit类来发送消息。所以我这样做了,我运行了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);
}