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

Ваш аккаунт

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

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

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

keybd_event

78K
13 февраля 2012 года
Maincore
2 / / 13.02.2012
Как можно определить была ли использована функция keybd_event или все же клавиша была нажата физически?
24K
14 февраля 2012 года
cn_venom
11 / / 23.01.2007
Сам вызов keybd_event не предоставляет такой возможности. Можно установить низкоуровневый перехват клавиатуры:

 
Код:
HHOOK m_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(0), NULL);


И внутри обработчика проверять через флаг LLKHF_INJECTED структуры KBDLLHOOKSTRUCT:

 
Код:
LRESULT CALLBACK KeyboardProc(int32 code, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT& ll = *(KBDLLHOOKSTRUCT*)lParam;

    if (ll.flags & LLKHF_INJECTED) return 1; //нажатие клавиши было программно внедрено

    return CallNextHookEx(m_hHook, code, wParam, lParam );
}


Такой перехват позволяет отказаться от keybd_event вовсе.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог