Asterisk & Freepbx: многодневные ночные тумблеры?

Вы можете использовать SendInput () для отправки кодов аппаратного сканирования (в отличие от виртуальных кодов сканирования, которые DirectInput может игнорировать). Он плохо документирован, но SendInput () действительно может обходить DirectInput. Причина, по которой решение Эрика не срабатывало, - это установить код сканирования аппаратного обеспечения, но в итоге он использовал код виртуального сканирования (установив dwFlags в 0 и wVk на ненулевой).

По существу, чтобы сделать нажмите клавишу, которую вы хотите установить:

ip.ki.dwFlags = KEYEVENTF_SCANCODE;

И чтобы сделать выпуск ключа, установите:

ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;

Ниже приведен полный рабочий образец, и он печатает букву 'a' , Вы можете найти другие коды сканирования здесь .

#define WINVER 0x0500
#include 

using namespace std;

int main()
{

    //Structure for the keyboard event
    INPUT ip;

    Sleep(5000);

    //Set up the INPUT structure
    ip.type = INPUT_KEYBOARD;
    ip.ki.time = 0;
    ip.ki.wVk = 0; //We're doing scan codes instead
    ip.ki.dwExtraInfo = 0;

    //This let's you do a hardware scan instead of a virtual keypress
    ip.ki.dwFlags = KEYEVENTF_SCANCODE;
    ip.ki.wScan = 0x1E;  //Set a unicode character to use (A)

    //Send the press
    SendInput(1, &ip, sizeof(INPUT));

    //Prepare a keyup event
    ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));



    return 0;
}

Примечание. Вы можете комбинировать нажатия клавиш (например, shift + a для A), передавая SendInput () массив структур INPUT ,

0
задан Aaron Ullal 25 February 2015 в 17:36
поделиться