Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я не вижу ответа на мой вопрос — всегда ли там вызывается CallNextHookEx. Это самое существенное. Делать другого типа незачем, у каждого типа хуков свое назначение. Надо ошибку найти.
Вызывается везде, как по мне.
Вот первая dll
--------------------------------------------------------------------
MYHOOKDLL_API int SetHook1 (HWND hWnd, UINT UpdateMsg)
{
if(hWnd == NULL)
return -1;
.............................
// Set hook
if(!hMsgHookKey)
{
hMsgHookKey= ::SetWindowsHookEx (WH_GETMESSAGE, GetMsgProc1, hInstance, 0);
if (hMsgHookKey == NULL)
return -1;
}
return 0;
}
LRESULT CALLBACK GetMsgProc1(int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
MSG *msg = (MSG *)lParam;
.................................
}
return CallNextHookEx (hMsgHookKey, code ,wParam , lParam);
}
------------------------------------------------------------------------------
вот вторая dll
MYHOOKDLL_API int SetHook2 (HWND hWnd, UINT UpdateMsg)
{
..............................
if (fInstall)
{
// set hook
g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc2, hInstance, 0);
.............................
}
}
static LRESULT WINAPI GetMsgProc2(int code, WPARAM wParam, LPARAM lParam)
{
return(CallNextHookEx(g_hhook, code, wParam, lParam));
}
PD>Хуки общесистемные или потоковые ? Общесистемные хуки работют в системе, им до процессов дела нет, поэтому какие процессы их ставят — несущественно. Потоковые хуки работают в потоке, им до процесса тоже дела нет, но если в процессе один поток, то как бы и в процессе
Хуки общесистемные. И ещё попробовал пока ждал ответа, сделать запуск этих хуков из разных процессов — работают хорошо не глючат и не мешают друг другу. Если вызываю SetHook1 SetHook2 из одной программы начинаются глюки — пишет то стек переполнен то системные ошибки вылетают то ещё что то. Значит всё таки как то процесс влияет но то откуда hook запущен.