C# 键盘钩子
2013-09-25 09:27
519 查看
#region 禁用系统按键 public partial class KBHook : Application { private struct KBDLLHOOKSTRUCT { public int vkCode; int scanCode; public int flags; int time; int dwExtraInfo; } private delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam); //禁用系统ctrl alt delete //其他组合按键钩子 [DllImport("user32.dll")] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId); [DllImport("user32.dll")] private static extern bool UnhookWindowsHookEx(IntPtr hHook); [DllImport("user32.dll")] private static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam); [DllImport("kernel32.dll")] private static extern IntPtr GetModuleHandle(IntPtr path); private IntPtr hHook; LowLevelKeyboardProcDelegate hookProc; // prevent gc const int WH_KEYBOARD_LL = 13; public KBHook() { // hook keyboard IntPtr hModule = GetModuleHandle(IntPtr.Zero); hookProc = new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc); hHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hModule, 0); if (hHook == IntPtr.Zero) { MessageBox.Show("Failed to set hook, error = " + Marshal.GetLastWin32Error()); } } protected override void OnExit(ExitEventArgs e) { UnhookWindowsHookEx(hHook); // release keyboard hook base.OnExit(e); } private static int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam) { if (nCode >= 0) switch (wParam) { case 256: // WM_KEYDOWN case 257: // WM_KEYUP case 260: // WM_SYSKEYDOWN case 261: // M_SYSKEYUP if ( (lParam.vkCode == 0x09 && lParam.flags == 32) || // Alt+Tab (lParam.vkCode == 0x1b && lParam.flags == 32) || // Alt+Esc (lParam.vkCode == 0x73 && lParam.flags == 32) || // Alt+F4 (lParam.vkCode == 0x20 && lParam.flags == 32) || // Alt+Space (lParam.vkCode == 0x1b && lParam.flags == 0) || // Ctrl+Esc (lParam.vkCode == 0x2e && (((lParam.flags & 32) == 32) && (lParam.flags & 0) == 0)) || // Ctrl+Alt+Delete (lParam.vkCode == 0x5b && lParam.flags == 1) || // Left Windows Key (lParam.vkCode == 0x5c && lParam.flags == 1)) // Right Windows Key { return 1; } break; } return CallNextHookEx(0, nCode, wParam, ref lParam); } } #endregion
相关文章推荐
- C#中键盘钩子的使用
- C#+低级Windows API钩子拦截键盘输入
- C#中键盘钩子的使用(转)
- C#中keybd_event实例(键盘钩子模拟按键)
- C#键盘钩子 学习笔记
- C#键盘鼠标钩子
- c# 钩子屏蔽键盘快捷键
- C#钩子类 几乎捕获键盘鼠标所有事件
- C#.Net的全局键盘钩子(Hook)技术
- C#+低级Windows API钩子拦截键盘输入
- c# 全局钩子之键盘 (实例)
- 用钩子(hook)实现C#的屏幕键盘效果
- C# 键盘钩子捕捉键盘组合键(附源码测试通过)
- C#+低级Windows API钩子拦截键盘输入
- C#键盘钩子 (转)
- C#键盘鼠标钩子
- C#键盘鼠标钩子实例
- 用钩子(hook)实现C#的屏幕键盘效果
- c#键盘钩子
- C#低级Windows API钩子拦截键盘输入