zoukankan      html  css  js  c++  java
  • c#-全局键盘钩子

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    
    namespace WebClick_Tool
    {
        public class KeyPress_o
        {
            [StructLayout(LayoutKind.Sequential)]
            public class KeyBoardHookStruct
            {
                public int vkCode;
                public int scanCode;
                public int flags;
                public int time;
                public int dwExtraInfo;
            }
            //委托 
            public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
            static int hHook = 0;
            public const int WH_KEYBOARD_LL = 13;
            //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 
            static HookProc KeyBoardHookProcedure;
    
            //设置钩子 
            [DllImport("user32.dll")]
            public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            //抽掉钩子 
            public static extern bool UnhookWindowsHookEx(int idHook);
            [DllImport("user32.dll")]
            //调用下一个钩子 
            public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
            [DllImport("kernel32.dll")]
            public static extern int GetCurrentThreadId();
            [DllImport("kernel32.dll")]
            public static extern IntPtr GetModuleHandle(string name);
    
            public static void Hook_Start()
            {
                if (hHook == 0)
                {
                    KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
                    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
                            GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
                    //如果设置钩子失败. 
                    if (hHook == 0)
                    {
                        Hook_Clear();
                    }
                }
            }
    
            /// <summary>
            /// 取消钩子事件
            /// </summary>
            public static void Hook_Clear()
            {
                bool retKeyboard = true;
                if (hHook != 0)
                {
                    retKeyboard = UnhookWindowsHookEx(hHook);
                    hHook = 0;
                }
            }
    
            public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
            {
                if (nCode >= 0)
                {
                    KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
                    Keys k = (Keys)Enum.Parse(typeof(Keys), kbh.vkCode.ToString());
                    switch (k)
                    {
                        case Keys.F2:
                            if (kbh.flags == 0)
                            {
                                // 这里写按下后做什么事
                                //Main.GB = true;
                                MainForm.Fs(FormBorderStyle.FixedSingle);
                                MainForm.StopAll = true;
                                MainForm.DisMes("停止...");
                                MainForm.Enb(true);
                            }
                            else if (kbh.flags == 128)
                            {
                                //放开后做什么事
                            }
                            return 1;
                    }
                }
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
        }
    }
    

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/csnd/p/12062202.html
Copyright © 2011-2022 走看看