资讯详情

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);         }     } }

标签: kbh智能压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司