Вопрос

Я пробовал все обычные методы фальшивых действий клавиатуры (SendInput/SendKeys/и т. Д.), Но ни один из них не работал для игр, в которых использовался DirectInput. После большого чтения и поиска я наткнулся на Перехват, которая представляет собой библиотеку C ++, которая позволяет вам подключаться к вашим устройствам.

Прошло очень много времени с тех пор, как я работал с C ++ (ничего не существовало для C#), поэтому у меня есть некоторые проблемы с этим. Я вставил в примере кода ниже.

Похоже, будет так, как будто будет инициировать ключевые действия из кода, используя это? Все образцы просто подключаются к устройствам и переписывают действия (x клавиш печати y, инвертирует ось мыши и т. Д.).

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;
    }

Код, который я прокомментировал, был чем -то, что я попробовал, и это не сработало.

Это было полезно?

Решение

Вам нужно настроить состояния клавиш для вверх и вниз, чтобы получить нажатия клавиш. Обратите внимание на то, что переменная устройство возвращается reception_wait, ваш прокомментированный код будет отправлять события на что ?? устройство не инициализируется! Забудьте о своем коде и попробуйте еще более простой. Посмотрите на строку внутри цикла с помощью вызова reception_send, сделайте больше двух вызовов после нее, но не забудьте изменить Incke.state перед каждым вызовом, используя reception_key_down и reception_key_up, чтобы вы подделали события. Вы получите дополнительные ключи на каждом мероприятии клавиатуры.

Кроме того, вы можете попробовать использовать reception_filter_key_all вместо reception_filter_key_down | Reception_filter_key_up. Клавиши стрел могут быть особыми, как упомянуто на веб -сайте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top