【问题标题】:How to send keydown event to inactive window in C++?如何将keydown事件发送到C++中的非活动窗口?
【发布时间】:2015-11-03 20:52:27
【问题描述】:

[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 事件。 尝试从几个地方搜索,但到目前为止我还没有找到解决方案。

【问题讨论】:

  • 为什么不PostMessage(hWindowHandle, WM_CHAR, 0x5A, 0);
  • 感谢您的建议,但我会失去 keydown 和 keyup 事件的功能。
  • 你可以试试SendMessage(hWindowHandle,WM_KEYUP,VK_Z,0); 来确定一下吗?
  • 现在试过了。 MinGW 无法编译代码:“1.cpp:24:39:错误:'VK_Z' 未在此范围内声明”我将新值声明为“DWORD VK_Z = 0x5A;”这将消除错误。按下按钮不适用于 Z。当我将代码更改为 0x09 时,它再次与 Tab 键一起使用。

标签: c++ sendmessage postmessage


【解决方案1】:

好的。当您按下Z 键时,使用 Spy++ 并挂钩记事本收到的消息。这样你就可以模拟/模拟完全相同的东西,所以它看起来就像用户按下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);
}

【讨论】:

  • 现在可以了。太糟糕了,我现在必须为 y struct 获取这么多 lparam 和 wparam 的新值。至少它有效。谢谢!
  • 没问题。这就是 Win API 的工作方式。您可以接受答案并关闭问题。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2014-03-21
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多