private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelCallback lpfn, IntPtr hMod, uint dwThreadId);
 /// <summary>
 /// Attaches given delegate function to given id type
 /// </summary>
 /// <param name="idHook"></param>
 /// <param name="callback"></param>
 /// <returns></returns>
 private static IntPtr Attach(int idHook, LowLevelCallback callback)
 {
     using (Process currentProcess = Process.GetCurrentProcess())
     using (ProcessModule currentModule = currentProcess.MainModule)
     {
         return SetWindowsHookEx(idHook, callback, GetModuleHandle(currentModule.ModuleName), 0);
     }
 }