Winapi 如何使用Keybd_事件发送;A「;例如

Winapi 如何使用Keybd_事件发送;A「;例如,winapi,keyboard-events,Winapi,Keyboard Events,我正试图写一个程序来控制键盘。我已经尝试过SendInput()&keybd_事件,但有一个块似乎不起作用 我需要它能够使用keybd_event()来按住shift键并按下队列前面的get键。 检索VKey时使用以下命令: Vkeys.GetKey(KeyQueue.front()); 通过以下方式检索扫描代码: MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC) 我需要它来使用这个并按下这里定义的这个键 有人能帮忙

我正试图写一个程序来控制键盘。我已经尝试过SendInput()&keybd_事件,但有一个块似乎不起作用

我需要它能够使用keybd_event()来按住shift键并按下队列前面的get键。 检索VKey时使用以下命令:

Vkeys.GetKey(KeyQueue.front());
通过以下方式检索扫描代码:

MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC)
我需要它来使用这个并按下这里定义的这个键


有人能帮忙吗?

有点乱:试试这样的东西。下面的代码将shift/alt/ctrl键排队,然后使用keycode(如果必须,您可以设置扫描代码,但我以前没有尝试过;我只需要发送ASCII),然后发送keyup事件以释放shift/alt/ctrl按钮

void SendSingleKey(int keycode, bool shift, bool ctrl, bool alt)
{
    INPUT * key, keys[8];
    UINT ret = 0;

    if(shift){
        key = &(keys[ret++]);
        key->ki.wVk = VK_SHIFT;
        key->type = INPUT_KEYBOARD;
        key->ki.dwFlags = 0;
        key->ki.time = 0;
        key->ki.wScan = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    if(ctrl){
        key = &(keys[ret++]);
        key->ki.wVk = VK_CONTROL;
        key->type = INPUT_KEYBOARD;
        key->ki.dwFlags = 0;
        key->ki.time = 0;
        key->ki.wScan = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    if(alt){
        key = &(keys[ret++]);
        key->ki.wVk = VK_MENU;
        key->type = INPUT_KEYBOARD;
        key->ki.dwFlags = 0;
        key->ki.time = 0;
        key->ki.wScan = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    key = &(keys[ret++]);
    key->type = INPUT_KEYBOARD;
    key->ki.wVk = keycode;
    key->ki.dwFlags = 0;
    key->ki.time = 0;
    key->ki.wScan = 0;
    key->ki.dwExtraInfo = GetMessageExtraInfo();

    key = &(keys[ret++]);
    key->type = INPUT_KEYBOARD;
    key->ki.wVk = keycode;
    key->ki.dwFlags = KEYEVENTF_KEYUP;
    key->ki.time = 0;
    key->ki.wScan = 0;
    key->ki.dwExtraInfo = GetMessageExtraInfo();

    if(alt){
        key = &(keys[ret++]);
        key->type = INPUT_KEYBOARD;
        key->ki.wVk = VK_MENU;
        key->ki.wScan = 0;
        key->ki.dwFlags = KEYEVENTF_KEYUP;
        key->ki.time = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    if(ctrl){
        key = &(keys[ret++]);
        key->type = INPUT_KEYBOARD;
        key->ki.wVk = VK_CONTROL;
        key->ki.wScan = 0;
        key->ki.dwFlags = KEYEVENTF_KEYUP;
        key->ki.time = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    if(shift){
        key = &(keys[ret++]);
        key->ki.wVk = VK_SHIFT;
        key->type = INPUT_KEYBOARD;
        key->ki.wScan = 0;
        key->ki.dwFlags = KEYEVENTF_KEYUP;
        key->ki.time = 0;
        key->ki.dwExtraInfo = GetMessageExtraInfo();
    }
    SendInput(ret,keys,sizeof(INPUT));
}