Сброс флага в структуре KBDLLHOOKSTRUCT - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Я совершенный новичек в C#. Как программист, тоже до сего момента не сильно состоялся. Немного знаю FoxPro, немного VBA, SQL,orACLE, XML. Как можно увидеть, в основном моя работа связана с базами данных. Собственно сам вопрос. Решил все таки освоить C#. Работаю проверенным методом. Беру какой нить проект, и пытаюсь дописать код, улучшить и так далее. Встал вопрос. Есть функция эмуляции клавишь. keybord_event. Из этой функции идет передача данных на очередь в RIT. И тут самая загвоздка. Программа в которую передаются нажатия клавиш, как я догадываюсь это видимо игра отслеживает в этой структуре KBDLLHOOKSTRUCT
 typedef struct tagKBDLLHOOKSTRUCT {
  DWORD     vkCode;
  DWORD     scanCode;
  DWORD     flags;
  DWORD     time;
  ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT;
флаг LLKHF_INJECTED 0x00000010 Test the event-injected flag. и не пропускает эмулированные клавиши. Можно ли заменить этот флаг, при отправке в RIT. Что бы программа думала, что это реальное нажатие клавиш. Как бы куски я увидел, что мне надо понял. Вот все вместе в виде кода я не могу оформить. В общем нужна помощь. Очень похожа на нужную тема Блокировать флажок на клавиатуре Но сам я разобраться не смог.
Неужели никто не может помочь. Я знаю кто может, SSTREGG , но написать я ему не могу. Пока у меня не будет 5 сообщений. Замкнутый круг

Решение задачи: «Сброс флага в структуре KBDLLHOOKSTRUCT»

textual
Листинг программы
                    KBDLLHOOKSTRUCT kbd = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure( lParam, typeof( KBDLLHOOKSTRUCT ) );
 
                    bool pressed = false;
                    if ( wParam.ToInt32() == 0x100 || wParam.ToInt32() == 0x104 )
                        pressed = true;
 
                    Keys keys = (Keys)kbd.vkCode;
                    args = new LLKHEventArgs( keys, pressed, kbd.time, kbd.scanCode );
 
                    if ( pressed )
                    {
                        if ( KeyDown != null )
                            KeyDown( args );
                    }
                    else
                    {
                        if ( KeyUp != null )
                            KeyUp( args );
                    }
 
                    // Убрать 4 бит, если он установлен
                    if ( (kbd.flags & KBDLLHOOKSTRUCTFlags.LLKHF_INJECTED) == KBDLLHOOKSTRUCTFlags.LLKHF_INJECTED )
                    {
                        kbd.flags &= ~KBDLLHOOKSTRUCTFlags.LLKHF_INJECTED;
 
                        Marshal.StructureToPtr( kbd, lParam, false );
 
                        Debug.WriteLine( "LLKHF_INJECTED..." );
                    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5