2012-08-03 48 views
-1

如何計算在c#應用程序中全屏按下的全鍵數量? 就像應用程序在後面運行一樣,我正在鍵入..然後我可以看到我按下了多少個鍵。謝謝。計算屏幕上按鍵的次數

+2

難道你不能只下載[WhatPulse](https://whatpulse.org/)?你有什麼嘗試? – CodeCaster 2012-08-03 11:19:25

+0

你是否試圖製作一個鍵盤記錄器類型的應用程序,它在所有應用程序中記錄鍵盤輸入。或者你只想在你的C#應用​​程序中記錄鍵輸入? – 2012-08-16 03:45:44

+0

當你只有1分給你的名字時,你是如何開150分的賞金? – jp2code 2012-08-16 19:22:44

回答

24

上找到MSDN Blogs

找到:

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      _hookID = SetHook(_proc); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
      UnhookWindowsHookEx(_hookID); 

     } 

     private const int WH_KEYBOARD_LL = 13; 
     private const int WM_KEYDOWN = 0x0100; 
     private static LowLevelKeyboardProc _proc = HookCallback; 
     private static IntPtr _hookID = IntPtr.Zero; 


     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); 
       Console.WriteLine((Keys)vkCode); 
      } 
      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)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     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); 
    } 
+1

你應該真的把源頭放在那裏。 – dualed 2012-08-16 19:10:46

0

也許它給你一些想法:

private void OnKeyDownHandler(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
    textBlock1.Text = "You Entered: " + textBox1.Text; 
    } 
} 
0

下載演示項目的形式在這裏:

Keylogger Project

,並進行自定義修改你想要什麼。

0

我使用下面的ProcessKeyEventArgs來捕獲我的C#Windows窗體中的按鍵Print Screen

我所做的修改它是添加一個計數器並增加它。

private long counter = 0; 

protected override bool ProcessKeyEventArgs(ref Message msg) { 
    counter++; 
    return base.ProcessKeyEventArgs(ref msg); 
}