Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

keybd_event и противоядие

66K
02 февраля 2011 года
FireFlynt
3 / / 01.02.2011
:)Есть две программы одна глобально хуком перехватывает нажатия клавиш а вторая синтезирует. Как можно отличить пользовательский стук по клавишам от синтезированных.
 
Код:
keybd_event(0x41, 0, 0, 0); // вот тут какой-то флаг
keybd_event(0x41, 0, KEYEVENTF_KEYUP, 0); // или введите капчу)

Похожий пример или Может кто сообразит?
535
02 февраля 2011 года
Нездешний
537 / / 17.01.2008
Используй SendInput для эмуляции ввода, и его флаг LLMHF_INJECTED. Пример (для мыши):
 
Код:
LRESULT CALLBACK MouseLowProc(int Code, WPARAM wParam, LPARAM lParam)
{
    if (Code < 0)   return CallNextHookEx(hhMouseLow, Code, wParam, lParam);

    MSLLHOOKSTRUCT *msHS = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);

    // если сообщение сгенерировано программно - не будем его обрабатывать
    if (msHS->flags & LLMHF_INJECTED)       return CallNextHookEx(hhMouseLow, Code, wParam, lParam);
...


Или попробуй использовать в своих целях параметр dwExtraInfo в keybd_event
66K
02 февраля 2011 года
FireFlynt
3 / / 01.02.2011
Очень интересно SendInput отлично подходит.
Но чтобы не порочить keybd_event попробую найти простое решение.
у WH_KEYBOARD_LL в lParam указатель на структуру KBDLLHOOKSTRUCT

typedef struct {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo; // бумбурум
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

Осталось обнаружить флаг хуком. Бум думу думать.

может
if(((PKBDLLHOOKSTRUCT)lParam)->dwExtraInfo==0)
Beep(40,10);
41K
09 февраля 2011 года
kisssko
108 / / 28.10.2010
Смотрим описание структуры KBDLLHOOKSTRUCT
В этой структуре есть член flags, и в этих флагах бит 4 как раз и показывает то, что нужно. И не столь важно какой командой слать событие.

Т.е., проверяем так:
 
Код:
KBDLLHOOKSTRUCT *kbdata;

kbdata = (KBDLLHOOKSTRUCT*)lParam;

if(kbdata->flags&0x0001000){действия, если нажатия сэмулированы}
else {действия, если пользователь нажал клавишу}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог