完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:C#鍵盤鉤子

    發布于:2019-08-23 17:01:11

    網友投稿

    更多

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

    //向控件發送消息

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


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

            }




    相關類:


        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

        {

            //設置鉤子 

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



            //調用下一個鉤子 

            [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;

            }

        }


    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:Revit開發關于創建Tab的問題

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

    主站蜘蛛池模板: 无码国产精品一区二区免费模式| 丰满少妇内射一区| 久夜色精品国产一区二区三区| 无码精品一区二区三区在线| 韩国一区二区三区| 亚洲午夜福利AV一区二区无码| 成人免费一区二区无码视频| 精品国产一区二区三区免费| 国产大秀视频一区二区三区| 精品人妻系列无码一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨 | 一区二区三区免费精品视频| 亚洲视频免费一区| 国产午夜精品一区二区三区小说| 日韩aⅴ人妻无码一区二区| 日本午夜精品一区二区三区电影| jizz免费一区二区三区| 国产一区视频在线免费观看| 国产福利微拍精品一区二区| 性色av一区二区三区夜夜嗨| 国内国外日产一区二区| 一级毛片完整版免费播放一区| 精品国产一区二区三区www| 亚洲熟妇AV一区二区三区宅男| 亚洲第一区香蕉_国产a| 日韩一区二区久久久久久| 视频一区精品自拍| 91麻豆精品国产自产在线观看一区| 国产av夜夜欢一区二区三区| 国产精品一区二区四区| 国产精品视频免费一区二区三区| 精品国产一区二区三区AV | 亚洲国产AV一区二区三区四区 | 日产亚洲一区二区三区| 无码人妻AV免费一区二区三区| 国产成人一区二区三区在线| 亚洲色欲一区二区三区在线观看| 中文字幕在线观看一区| a级午夜毛片免费一区二区| 成人影片一区免费观看| 国精无码欧精品亚洲一区|