keybd_event ctrl+shift+down 组合键中,shift不生效

如歌 风语 0 信誉分
2024-12-17T02:28:33.7033333+00:00

我使用keybd_event在excel上实现组合键ctrl+shift+down,代码如下

#include <windows.h>
#include <iostream>
#include <thread>

int main() {
    
    std::this_thread::sleep_for(std::chrono::seconds(2));  // 等待 2 秒
    // 模拟按下Ctrl键
    keybd_event(VK_CONTROL, 0x1d, 0, 0);
    // 模拟按下Shift键
    keybd_event(VK_SHIFT, 0, 0, 0);
    // 模拟按下Down箭头键
    keybd_event(VK_DOWN, 0, 0, 0);

    // 模拟释放Down箭头键
    keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
    // 模拟释放Shift键
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    // 模拟释放Ctrl键
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

    return 0;
}


但它不生效,具体的说是其中的shift不生效,然后我使用unicode

#include <windows.h>
#include <iostream>
#include <thread>

int main() {
    
    std::this_thread::sleep_for(std::chrono::seconds(2));  // 等待 2 秒
    // 模拟按下Ctrl键
    keybd_event(VK_CONTROL, 0x1d, 0 | KEYEVENTF_UNICODE, 0);
    // 模拟按下Shift键
    keybd_event(VK_SHIFT, 0x2a, 0 | KEYEVENTF_UNICODE, 0);
    // 模拟按下Down箭头键
    keybd_event(VK_DOWN, 0x50, 0 | KEYEVENTF_UNICODE, 0);

    // 模拟释放Down箭头键
    keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP | KEYEVENTF_UNICODE, 0);
    // 模拟释放Shift键
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP | KEYEVENTF_UNICODE, 0);
    // 模拟释放Ctrl键
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP | KEYEVENTF_UNICODE, 0);

    return 0;
}

没有问题。

这是为什么?而且在不使用unicode的前提下,shift不和方向键(up/down/right/left)组合,和其他按键的组合都是正常的。

谢谢您解答我的问题!

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
116 个问题
{count} 票

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。