using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace Key { public class Hook { public delegate int HookKeyProc(int code, IntPtr wParam, IntPtr lParam); private HookKeyProc hookKeyDeleg; private static int hHookKey = 0; public Hook() { } #region public methods //安装钩子 public void Start() { if (hHookKey != 0) { //Unhook the previouse one this.Stop(); } hookKeyDeleg = new HookKeyProc(HookKeyProcedure); hHookKey = SetWindowsHookEx(WH_KEYBOARD_LL, hookKeyDeleg, GetModuleHandle(null), 0); if (hHookKey == 0) { throw new SystemException("Failed acquiring of the hook."); } } //拆除钩子 public void Stop() { UnhookWindowsHookEx(hHookKey); } #endregion #region protected and private methods private int HookKeyProcedure(int code, IntPtr wParam, IntPtr lParam) { KBDLLHOOKSTRUCT hookStruct = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); if (code < 0) { return CallNextHookEx(hookKeyDeleg, code, wParam, lParam); } if (hookStruct.vkCode == 0x72)//拨打电话键 { //自己的处理 //处理完之后一定要返回-1 return -1 } // 没处理的键的消息往下传递 return CallNextHookEx(hookKeyDeleg, code, wParam, lParam); } #endregion #region P/Invoke declarations [DllImport("coredll.dll")] private static extern int SetWindowsHookEx(int type, HookKeyProc HookKeyProc, IntPtr hInstance, int m); [DllImport("coredll.dll")] private static extern IntPtr GetModuleHandle(string mod); [DllImport("coredll.dll")] private static extern int CallNextHookEx(HookKeyProc hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("coredll.dll")] private static extern int GetCurrentThreadId(); [DllImport("coredll.dll", SetLastError = true)] private static extern int UnhookWindowsHookEx(int idHook); private struct KBDLLHOOKSTRUCT { public int vkCode; public int scanCode; public int flags; public int time; public IntPtr dwExtraInfo; } const int WH_KEYBOARD_LL = 20; public class KeyBoardInfo { public int vkCode; public int scanCode; public int flags; public int time; } #endregion } } 在应用时,可以将这个类添加到自己的项目中,在要用的地方直接调用,方法如下: Hook hk=new Hook(); hk.Start(); hk.Stop(); |
C# WINCE5 钩子
最新推荐文章于 2018-05-20 00:57:55 发布