Нажатие клавиш в Counter Strike

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 20 Mar 2009.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    всем привет. вот задачка - посылать нажатие клавиш в игру. а именно - например пробела чтоб прыгать.

    пробовал такие методы:

    1)
    GetKeyboardState(keyb);
    keyb[VK_SPACE] |= 128;
    SetKeyboardState(keyb);

    2) через SendInput

    3) keybd_event

    работает и в менюхах и в консоли, но в самой игре - реакция 0. =(

    сталкивался кто?
    (может директинпут... но с этим сомнения есть)
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну тогда попробуй поглядеть все окна которые принадлежат процессу и каждому окну шли WM_KEYDOWN / WM_KEYUP
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    тоже делал через PostMessage.
    тут не проходит тк юзается dinput который читает напрямую.

    тогда суть немного меняется - как изменить kbdclass из ддк чтобы можно было "вписывать" нажатие программно =)
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Тогда тебе нужно через IoCreateDevice и IoAttachDevice аттачиться к \\Device\\KeyboardClass0 и там уже фильтровать что и откого идет чтобы глянуть как пашет, а дальше самому работать уже с этим устройством для посылки нажания

    А вообще обработка нажатия на кнопку
    в \\Device\\KeyboardClass0 идет через IRP_MJ_READ
    Где буфер - это
    typedef struct _KEYBOARD_INPUT_DATA {
    USHORT UnitId;
    USHORT MakeCode;
    USHORT Flags;
    USHORT Reserved;
    ULONG ExtraInformation;
    } KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;

    Так что как вариант можно поробовать самому делать подобного типа запросы к драйверу.
     
    #4 slesh, 20 Mar 2009
    Last edited: 20 Mar 2009
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    блин я немного забыл что когда контру сворачиваешь, управление переходит к рабочему столу, чтож тогда буду тренироваться с dinput %)