完善主體資料,免費(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| 一区二区三区视频在线观看| www一区二区三区| 国产成人一区二区三区在线| 精品国产高清自在线一区二区三区| 国产亚洲一区二区在线观看| 亚洲成a人一区二区三区| 在线|一区二区三区| 亚洲AV无码一区二区三区久久精品| 国产一区二区三区不卡观| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日韩免费无码视频一区二区三区| 成人免费视频一区二区| 波多野结衣中文字幕一区| 国产肥熟女视频一区二区三区| 中文字幕AV无码一区二区三区| 亚洲一区二区三区播放在线| 精品无码国产一区二区三区AV| 亚洲制服中文字幕第一区| 搡老熟女老女人一区二区| 蜜桃无码一区二区三区| 精品欧洲av无码一区二区14| 在线视频一区二区| 亚洲第一区视频在线观看| 日韩在线不卡免费视频一区| 亚洲va乱码一区二区三区| 国产一区二区三区韩国女主播| AV无码精品一区二区三区| 糖心vlog精品一区二区三区| 国产精品无码一区二区在线| 精品一区二区三区无码免费直播| 精品无码成人片一区二区| 国产成人高清精品一区二区三区 | 国产一区韩国女主播| 日美欧韩一区二去三区| 一区二区高清在线| 激情内射亚州一区二区三区爱妻| 无码人妻精品一区二区三18禁|