Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > проблема с использованием хука


Автор: sabantui 18.3.2006, 12:54
Всем доброго времени суток. У меня такая проблема. есть следующий кусок кода dll-ки для хука
----------------------------------------------------------------------------------------------------------------------------------------
ExecutableFunction Function;
HHOOK hMouseHook;

HOOK_API void DoHook(ExecutableFunction _Function)
{
Function = _Function;
hMouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseFunction, ::LoadLibrary("Hook.dll") , 0);
}

HOOK_API void DoUnhook()
{
UnhookWindowsHookEx(hMouseHook);
}

LRESULT CALLBACK MouseFunction(int _Code, WPARAM _wParam, LPARAM _lParam)
{
if (_Code >= 0)
{
LPMOUSEHOOKSTRUCT MouseHookParam = (MOUSEHOOKSTRUCT*) _lParam;

if (MouseHookParam->pt.y == 0 && MouseHookParam->pt.x == 0)
{
try
{
Function();
}
catch(...)
{
MessageBox(NULL, "мдя... :-(((", "инфа к размышлению", MB_OK);
}
return 1;
}
}

return ::CallNextHookEx(hMouseHook, _Code, _wParam, _lParam);
}
---------------------------------------------------------------------------------------------------------------------------------------------
проблема в том, что в функции MouseFunction, обработчеке перехватываемых от мыши сообщений, указатель Function на функцию почемуто равен NULL, хотя в методе DoHook я его инициирую. Что не так?
Добавлено @ 12:57
и еще, по каким-то странным обстоятельствам несколько раз подряд все работало очень хорошо...
ЗЫ блин... все форматироваине потерялось smile ... я не виноват...

Автор: Earnest 20.3.2006, 17:10
Виноват-виноват: нужно пользоваться кнопкой "код", а еще неплохо бы прочесть правила форума, перед тем, как туда писать.
По сути вопроса: твою проблему нужно решать с отладчиком в зубах: может ты нулем свой указатель и инициализируешь?

Автор: Fin 20.3.2006, 21:14
Покажи, как ты вызываеш функцию DoHook. И как определён тип ExecutableFunction.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)