gpt4 book ai didi

c - SendMessage 适用于 WM_CHAR,但不适用于 WM_KEYDOWN

转载 作者:行者123 更新时间:2023-11-30 18:11:22 25 4
gpt4 key购买 nike

我希望能够使用 C 在 Windows 10 上模拟箭头键按下。此外,我希望避免必须让我发送这些箭头键按下的窗口始终处于事件状态,因此我的尝试避免使用SendInput()keybd_event()。我相信除了使用 SendMessage() 发送消息 WM_KEYDOWN 之外,我几乎没有其他选择。

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com