完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
      * 主體類型
      * 企業(yè)名稱
      * 信用代碼
      * 所在行業(yè)
      * 企業(yè)規(guī)模
      * 所在職位
      * 姓名
      * 所在行業(yè)
      * 學(xué)歷
      * 工作性質(zhì)
      請(qǐng)先選擇行業(yè)
      您還可以選擇以下福利:
      行業(yè)福利,領(lǐng)完即止!

      下載app免費(fèi)領(lǐng)取會(huì)員

      NULL

      ad.jpg

      二次開發(fā)教程:C#鍵盤鉤子

      發(fā)布于:2019-08-23 17:01:11

      網(wǎng)友投稿

      更多

             HookProc hookProc = null;

              IntPtr hookValue = IntPtr.Zero;

              const int WM_CLICK = 0x00F5;

              public Form1()

              {

                  InitializeComponent();

              }


              //安裝

              private void button1_Click(object sender, EventArgs e)

              {

                  if (hookProc == null)

                  {

                      hookProc = new HookProc(this.MyProMethod);

                      IntPtr hModule = NativeMethods.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);

                      //局部鉤子

                      hookValue = NativeMethods.SetWindowsHookEx(HookType.WH_KEYBOARD, hookProc, hModule, NativeMethods.GetCurrentThreadId());

                      //全局鉤子

                      //hookValue = NativeMethods.SetWindowsHookEx(HookType.WH_KEYBOARD_LL, hookProc, hModule, 0);

                  }

              }


              private int MyProMethod(int nCode, IntPtr wParam, IntPtr lParam)

              {

                  int code = nCode;

                  int w = wParam.ToInt32();

                  int l = lParam.ToInt32();


                  //直接用IntPrt無法返回

                  List<IntPtr> prts = GetHandle(this.Handle, IntPtr.Zero, null, "Test");

      //向控件發(fā)送消息

                  IntPtr tp = NativeMethods.SendMessage(prts.First(), WM_CLICK, IntPtr.Zero, IntPtr.Zero);


                  return NativeMethods.CallNextHookEx(hookValue, nCode, wParam, lParam);

              }




      相關(guān)類:


          public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

          public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);

          public enum HookType : int

          {

              WH_JOURNALRECORD = 0,

              WH_JOURNALPLAYBACK = 1,

              WH_KEYBOARD = 2,

              WH_GETMESSAGE = 3,

              WH_CALLWNDPROC = 4,

              WH_CBT = 5,

              WH_SYSMSGFILTER = 6,

              WH_MOUSE = 7,

              WH_HARDWARE = 8,

              WH_DEBUG = 9,

              WH_SHELL = 10,

              WH_FOREGROUNDIDLE = 11,

              WH_CALLWNDPROCRET = 12,

              WH_KEYBOARD_LL = 13,

              WH_MOUSE_LL = 14

          }

          public class NativeMethods

          {

              //設(shè)置鉤子 

              [DllImport("user32.dll")]

              public static extern IntPtr SetWindowsHookEx(HookType idHook, HookProc lpfn, IntPtr hInstance, int threadId);



              //卸載鉤子

              [DllImport("user32.dll", SetLastError = true)]

              [return: MarshalAs(UnmanagedType.Bool)]

              public static extern bool UnhookWindowsHookEx(IntPtr hhk);



              //調(diào)用下一個(gè)鉤子 

              [DllImport("user32.dll")]

              public static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);



              [DllImport("kernel32.dll")]

              public static extern int GetCurrentThreadId();



              [DllImport("user32.dll")]

              public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);


              [DllImport("user32.dll")]

              public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);


              [DllImport("Kernel32.dll")]

              public static extern IntPtr GetModuleHandle(string lpModuleName);



              [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]

              public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);



              [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]

              public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);



              [DllImport("user32")]

              [return: MarshalAs(UnmanagedType.Bool)]

              public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);

          }


      //t通過className和windowTitle來尋找控件

          public class ControlIntPrtUtils

          {

              private string className = string.Empty;

              private string windowTitle = string.Empty;

              public ControlIntPrtUtils(string className,string windowTitle)

              {

                  this.className = className;

                  this.windowTitle = windowTitle;

              }

              public List<IntPtr> GetHandle(IntPtr parentHandle, IntPtr childAfter)

              {

                  List<IntPtr> prts = new List<IntPtr>();

                  IntPtr hwnd = NativeMethods.FindWindowEx(parentHandle, IntPtr.Zero, className, windowTitle);

                  if (hwnd != IntPtr.Zero)

                  {

                      prts.Add(hwnd);

                      return prts;

                  }

                  GCHandle gch = GCHandle.Alloc(prts);

                  NativeMethods.EnumChildWindows(parentHandle, new EnumWindowProc(EnumCallBack), GCHandle.ToIntPtr(gch));

                  return prts;

              }

              private bool EnumCallBack(IntPtr hWnd, IntPtr parameter)

              {

                  IntPtr hwnd = NativeMethods.FindWindowEx(hWnd, IntPtr.Zero, className, windowTitle);

                  if (hwnd != IntPtr.Zero)

                  {

                      GCHandle gch = GCHandle.FromIntPtr(parameter);

                      List<IntPtr> prts = gch.Target as List<IntPtr>;

                      prts.Add(hwnd);

                      return false;

                  }

                  return true;

              }

          }


      本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

      未標(biāo)題-1.jpg

      上一篇:二次開發(fā)教程:Revit開發(fā)關(guān)于創(chuàng)建Tab的問題

      下一篇:二次開發(fā)教程:WPF 使用net 資源多語言

      主站蜘蛛池模板: 波多野结衣一区二区三区| 鲁大师成人一区二区三区| 无码人妻精一区二区三区| 精品一区二区三区无码免费视频| 国产成人精品一区二区秒拍 | 精品中文字幕一区二区三区四区| 日本免费一区尤物| 色视频综合无码一区二区三区 | 少妇精品无码一区二区三区| 国产一区二区免费| 久久久精品人妻一区二区三区四 | 无码精品久久一区二区三区| 精品视频在线观看你懂的一区| 国产乱码精品一区二区三区中文 | 无码精品人妻一区二区三区AV| 日本在线视频一区| 一区二区在线电影| 国产91精品一区| 亚洲综合色一区二区三区小说| 国产综合无码一区二区色蜜蜜| 国产乱码精品一区二区三| 国产精品一区二区久久精品| 亚洲一区二区视频在线观看 | 精品综合一区二区三区| 国产在线一区二区| 无码人妻av一区二区三区蜜臀| 国产在线精品一区二区三区直播 | 人妻无码一区二区三区AV| 精品国产高清自在线一区二区三区 | 国产精品亚洲产品一区二区三区 | 精品一区二区三区| 亚洲AV无码一区二区乱子伦 | 亚洲av色香蕉一区二区三区 | 另类一区二区三区| 国产精品一区二区在线观看| 农村乱人伦一区二区| 国产精品99无码一区二区| 在线精品亚洲一区二区| 日本大香伊一区二区三区| 国产精品亚洲一区二区三区| 3d动漫精品啪啪一区二区免费|