Сброс флага в структуре 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..." );
}