HOOK钩子类

来源:互联网 发布:在淘宝上买电动汽车 编辑:程序博客网 时间:2024/06/06 20:51
</pre><pre name="code" class="csharp"> public class KeyHook    {        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]        public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]        public static extern bool UnhookWindowsHookEx(int idHook);        public delegate int HookProc(int nCode, int wParam, IntPtr lParam);        // Fields         private static int hKeyboardHook;        private HookProc KeyboardHookProcedure;        public const int WH_KEYBOARD_LL = 13;        // Methods         static KeyHook()        {            hKeyboardHook = 0;        }        private int code = 0;        public KeyHook()        {            this.Start();        }        public KeyHook(int keyCode)        {            this.Start();            this.code = keyCode;        }        private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam)        {            KeyboardHookStruct struct2 = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));            KeyEventArgs args = new KeyEventArgs((Keys)struct2.vkCode);            Console.WriteLine(args.KeyValue.ToString());            //屏蔽            //91,92 ==> win键             //93 ==> app键            // 9 ==> tab 键            //18 ==> alt 键            if (args.KeyValue == code || args.KeyValue == 9 || args.KeyValue == 91 || args.KeyValue == 92 || args.KeyValue == 93)            {                return 1;            }            return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);        }        public void Hook()        {            this.Start();        }        public void UnHook()         {             this.Stop();         }        public void Start()        {            if (hKeyboardHook == 0)            {                this.KeyboardHookProcedure = new HookProc(this.KeyboardHookProc);                Module m = Assembly.GetExecutingAssembly().GetModules()[0];                IntPtr p = Marshal.GetHINSTANCE(m);                hKeyboardHook = SetWindowsHookEx(13, this.KeyboardHookProcedure, p, 0);                if (hKeyboardHook == 0)                {                    this.Stop();                    Log.WriteErLog("KeyHook:SetWindowsHookEx ist failed.");                    //throw new Exception("SetWindowsHookEx ist failed.");                }            }        }        public void Stop()        {            bool flag = true;            if (hKeyboardHook != 0)            {                flag = UnhookWindowsHookEx(hKeyboardHook);                hKeyboardHook = 0;            }            if (!flag)            {                Log.WriteErLog("KeyHook:SetWindowsHookEx ist failed.");                //throw new Exception("UnhookWindowsHookEx failed.");            }        }        ~KeyHook()        {            this.Stop();        }        [StructLayout(LayoutKind.Sequential)]        public class KeyboardHookStruct        {            public int vkCode;            public int scanCode;            public int flags;            public int time;            public int dwExtraInfo;            public KeyboardHookStruct()            {            }        }    }


0 0