我希望能够使用C模拟Windows 10上的箭头按键。此外,我想避免必须让我发送这些箭头按键的窗口始终处于活动状态,因此我尝试避免使用SendInput()
和keybd_event()
。我相信这让我除了使用WM_KEYDOWN
发送消息SendMessage()
之外几乎没有其他选择。
不过,作为使用WM_KEYDOWN
消息的第一个测试,我正在尝试将keypress 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
事件与箭头虚拟键代码结合使用时,光标会移动。