Приветствую всех!
Есть вопрос косающийся системного хука JOURNALPLAYBACK, точнее корректности написания фильтрующей функции.
Запись клавиатурных и мышиных сообщений проходи просто на загляденние а вот с проигрышем этих сообщений возникают трудности ниже я опишу фильтрующую функцию
LRESULT CALLBACK
__JournalPlayBack(int code, WPARAM wParam, LPARAM lParam)
{
switch(code)
{
case HC_SKIP:
item++;//глобальная переменная DWORD обнуляется при каждой установке фильтра
if(item >= vJrn.size())//vJrn - контейнер EVENTMSG куда были записаны сообщения
UnhookWindowsHookEx(hHook);
hHook = 0;
break;
case HC_GETNEXT:
vJrn[item].time = GetTickCount();
*((EVENTMSG*)lParam) = vJrn[item];
break;
default:
return CallNextHookEx(hHook, code, wParam, lParam);
}
return 0;
}
Не могу почеловечески отдебажить поэтому и задаю вопросы
1. в чем не правильность написания?
2. Просьба если кто ваял бросте пожалуйста код этой функции можно без коментариев
З.Ы. время между сообщениями пока не имеет значения
Здравствуйте _Cancel, Вы писали:
C>
C>C>LRESULT CALLBACK
C>__JournalPlayBack(int code, WPARAM wParam, LPARAM lParam)
C>{
C> switch(code)
C> {
C> case HC_SKIP:
C> item++;//глобальная переменная DWORD обнуляется при каждой установке фильтра
C> if(item >= vJrn.size())//vJrn - контейнер EVENTMSG куда были записаны сообщения
C> UnhookWindowsHookEx(hHook);
C> hHook = 0;
C> break;
C> case HC_GETNEXT:
C> vJrn[item].time = GetTickCount();
C> *((EVENTMSG*)lParam) = vJrn[item];
C> break;
C> default:
C> return CallNextHookEx(hHook, code, wParam, lParam);
C> }
C> return 0;
C>}
C>
1) Если я не глючю в конце рабочего дня в конце рабочей недели, то
hHook = 0;
должно сидеть под if-ом, чего не заметно в приведенном коде
2) Если ты вдруг пишешь для NT 3.5, то прочитай
Q124835 PRB: JournalPlayback Hook Can Cause Windows NT to Hang
В 2000-ном эта проблема исправлена
3)
Q37138 Windows Journal Hooks Source Code
Немного старенький код, но может чем-то поможет
Вот в принципе и всё, что я хотел сказать