在 windows C++ 中模拟选择

simulate selection in windows C++

我的记事本里有这个:

hello

我想使用 Windows' keybd_event 函数在 C++ 中模拟 selecting。 这是我的代码:

keybd_event(VK_SHIFT, 0, 0, 0);
for (size_t i = 0; i < 5; i++)
{
    keybd_event(VK_LEFT, 0, 0, 0);
    keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);
}
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

但是在我 运行 之后,它什么都没有 select,它只是转到文件的开头。为什么这不起作用?

添加 KEYEVENTF_EXTENDEDKEY 将 select 正确。

https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-keybdinput#members

#include <windows.h>

void main()
{
Sleep(2000);
keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_EXTENDEDKEY, 0);
for (size_t i = 0; i < 5; i++)
{

    keybd_event(VK_LEFT, 0, 0, 0);
    keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);
    Sleep(20);
}
keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}

在keybd_event中使用VK_SHIFT,存在shift无法释放的问题,建议大家使用SendInput而不是keybd_event。 对于higher-level操作,我也推荐你使用UI Automation.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput https://docs.microsoft.com/en-us/windows/win32/winauto/entry-uiauto-win32