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