Как бы я использовал Keybd_event, чтобы отправить «А», например? - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь написать программу для управления клавиатурой. Я уже пробовал SendInput () & keybd_event и у меня есть блок, который, кажется, не работает.

Мне нужно, чтобы он мог использовать keybd_event (), чтобы удерживать Shift и нажимать клавишу get в начале очереди. ключ получен с:

Vkeys.GetKey(KeyQueue.front());

Код сканирования получен с помощью:

MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC)

Мне нужно, чтобы использовать это и нажать эту клавишу, определенную здесь.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 01 августа 2011

Умеренно грязно: попробуйте что-нибудь похожее на это.Приведенный ниже код ставит в очередь ключи shift / alt / ctrl, затем использует код клавиши (вы можете установить код сканирования, если нужно, но я раньше не пробовал; мне нужно было только отправить 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));
}
...