111,098
社区成员




using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace WindowsApplication4
{
public class KeyHook
{
private Form1 f1 = null;
public KeyHook(Form1 form)
{
Start();
f1 = form;
}
~KeyHook()
{
Stop();
}
public const int WH_KEYBOARD_LL = 13;
public const int WM_KEYDOWN = 0x100;
private const int WM_SYSKEYDOWN = 0x104;
private const int WM_SYSKEYUP = 0x105;
public event KeyEventHandler KeyDown;
public event KeyEventHandler KeyUp;
public event KeyEventHandler KeyPress;
public static bool flag;
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
public static int hKeyboardHook = 0;
HookProc KeyboardHookProcedure;
[StructLayout(LayoutKind.Sequential)]
public class POINT
{
public int x;
public int y;
}
[StructLayout(LayoutKind.Sequential)]
public class KeyboardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll")]
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll")]
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
public void Start()
{
//install hook
if (hKeyboardHook == 0)
{
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); }
}
public void Stop()
{
if (hKeyboardHook != 0)
{
bool retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = 0;
}
}
public int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
int r = CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
// it was ok and someone listens to events
if ((nCode >= 0) && (KeyDown != null || KeyUp != null || KeyPress != null))
{
KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));
if (KeyDown != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN && wParam == WM_SYSKEYDOWN))
{
//if ((wParam >= 'A' && wParam <= 'Z') || (wParam >= 'a' && wParam <= 'z') || (wParam >= '0' && wParam <= '9'))
//{
// return wParam;
// //Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;
// //KeyEventArgs e = new KeyEventArgs(keyData);
// //f1.Text += e.KeyCode;
// //Console.WriteLine(e.KeyValue);
//}
////return 1;
return 1;
}
}
return r;
}
}
}
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);