Документация по Windows API объясняет все аргументы лучше, чем кто-либо может здесь: http://msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspx
Аргумент second является либо NULL, либо указателем на HOOKPROC.Обратите внимание: «Если параметр dwThreadId равен нулю или указывает идентификатор потока, созданного другим процессом, параметр lpfn должен указывать на подключаемую процедуру в DLL. В противном случае lpfn может указывать на подключаемую процедуру в коде, связанном стекущий процесс. "Вот пример HOOKPROC из MSDN:
LRESULT CALLBACK HookProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
// process event
...
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Аргумент третий должен быть "установлен в NULL, если параметр dwThreadId указывает поток, созданный текущим процессом, и если процедура подключенияв коде, связанном с текущим процессом.
четвертый - это «Идентификатор потока, с которым должна быть связана подключаемая процедура.Если этот параметр равен нулю, процедура подключения связана со всеми существующими потоками, работающими на том же рабочем столе, что и вызывающий поток. "