Re[4]: Несколько hook в одном процессе
От: c0deC Украина  
Дата: 30.09.09 13:32
Оценка:
Здравствуйте, 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 запущен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.