我希望能够使用C在Windows 10上模拟箭头按键。此外,我希望避免必须始终将发送这些箭头按键的窗口激活,因此我尝试避免使用和SendInput()。我相信,除了使用keybd_event()发送消息WM_KEYDOWN之外,这没有其他选择。

不过,作为使用SendMessage()消息的第一个测试,我试图将按键WM_KEYDOWN发送到记事本,以使我可以看到发生了什么。这导致以下两行代码:

SendMessage(child_window, WM_CHAR, (WPARAM)0x41, (LPARAM)0);
SendMessage(child_window, WM_KEYDOWN, (WPARAM)0x41, (LPARAM)0);


第一个有效:在记事本中键入字母A。第二个没有,但是我很难弄清楚为什么。有什么建议么?

这是完整的代码:

#include <stdio.h>
#include <Windows.h>

int main()
{
  HWND window = FindWindow("Notepad", NULL);
  if (window == NULL)
  {
    printf("Could not find the window.\n");
    return 1;
  }

  HWND child_window = FindWindowEx(window, NULL, "Edit", NULL);
  if (child_window == NULL)
  {
    printf("Child window could not be found.\n");
    return 1;
  }

  SendMessage(child_window, WM_CHAR, (WPARAM)0x41, (LPARAM)0);
  SendMessage(child_window, WM_KEYDOWN, (WPARAM)0x41, (LPARAM)0);

  return 0;
}

最佳答案

嗯,这可能只是因为记事本过程在遇到WM_CHAR事件时才将字母追加到其编辑窗口,这毕竟不是那么奇怪。当将WM_KEYDOWN事件与箭头虚拟键代码结合使用时,光标确实会移动。

关于c - SendMessage适用于WM_CHAR,但不适用于WM_KEYDOWN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48087580/

10-15 06:02