Domanda

Ho provato tutti i normali metodi di falsificazione azioni della tastiera (SendInput / SendKeys / etc), ma nessuno di loro sembrava funzionare per i giochi che utilizzavano DirectInput. Dopo un sacco di lettura e di ricerca mi sono imbattuto in Intercettazione , che è una libreria C ++ che permette di collegare in vostri dispositivi .

E 'stato un molto tempo da quando ho lavorato con C ++ (Niente esisteva per C #) così sto avendo qualche problema con questo. Ho incollato nel codice di esempio riportato di seguito.

Ti sembra che non ci sarebbe comunque di avviare azioni chiave del codice di utilizzo di questo? Tutti i campioni solo gancio nei dispositivi e riscrivere azioni (x stampe chiave y, asse inverte mouse, ecc).

enum ScanCode
{
    SCANCODE_X   = 0x2D,
    SCANCODE_Y   = 0x15,
    SCANCODE_ESC = 0x01
};

int main()
{
    InterceptionContext context;
    InterceptionDevice device;
    InterceptionKeyStroke stroke;

    raise_process_priority();

    context = interception_create_context();

    interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);

    /*
    for (int i = 0; i < 10; i++)
    {
        Sleep(1000);
        stroke.code = SCANCODE_Y;
        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);
    }
    */

    while(interception_receive(context, device = interception_wait(context), (InterceptionStroke *)&stroke, 1) > 0)
    {
        if(stroke.code == SCANCODE_X) stroke.code = SCANCODE_Y;

        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);

        if(stroke.code == SCANCODE_ESC) break;
    }

Il codice ho commentato fuori era qualcosa che ho provato non ha funzionato.

È stato utile?

Soluzione

È necessario modificare stati chiave su e giù per gli Stati per ottenere la pressione dei tasti. Prestare attenzione al ciclo while che la variabile dispositivo viene restituito dalla interception_wait, il codice commentato avrebbe inviare gli eventi a cosa ?? dispositivo non è inizializzato! Dimentica il codice e provare alcuni più fondamentale. Guardare la linea all'interno del ciclo con la chiamata interception_send, rendere più due chiamate dopo che è, ma non dimenticate di cambiamento stroke.state prima di ogni chiamata utilizzando INTERCEPTION_KEY_DOWN e INTERCEPTION_KEY_UP in modo da falso verso il basso e gli eventi. Otterrete tasti extra ad ogni evento della tastiera.

Inoltre, si può provare l'uso INTERCEPTION_FILTER_KEY_ALL invece di INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP. I tasti freccia possono essere quelli speciali come detto sul sito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top