在dll安装了全局钩子,hook openprocess的部分不能运行

在dll安装了全局钩子,hook openprocess的部分不能运行,第1张

可以试试,项目裏面新增一个窗体(自定义消息框),然後看下面代码:

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemLinq;

using SystemText;

using SystemWindowsForms;

using SystemDiagnostics;

using SystemRuntimeInteropServices;

namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //委托 

        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会在你截取之前获得键盘。 

        HookProc KeyBoardHookProcedure;

        //键盘Hook结构函数 

        [StructLayout(LayoutKindSequential)]

        public class KeyBoardHookStruct

        {

            public int vkCode;

            public int scanCode;

            public int flags;

            public int time;

            public int dwExtraInfo;

        }

        #region DllImport

        //设置钩子 

        [DllImport("user32dll")]

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

        [DllImport("user32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]

        //抽掉钩子 

        public static extern bool UnhookWindowsHookEx(int idHook);

        [DllImport("user32dll")]

        //调用下一个钩子 

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

        [DllImport("kernel32dll")]

        public static extern int GetCurrentThreadId();

        [DllImport("kernel32dll")]

        public static extern IntPtr GetModuleHandle(string name);

        #endregion

        #region 自定义事件

        public void Hook_Start()

        {

            // 安装键盘钩子 

            if (hHook == 0)

            {

                KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);

                //hHook = SetWindowsHookEx(2,

                //            KeyBoardHookProcedure,

                //           GetModuleHandle(ProcessGetCurrentProcess()MainModuleModuleName), GetCurrentThreadId());

                hHook = SetWindowsHookEx(WH_KEYBOARD_LL,

                          KeyBoardHookProcedure,

                         GetModuleHandle(ProcessGetCurrentProcess()MainModuleModuleName), 0);

                //如果设置钩子失败 

                if (hHook == 0)

                {

                    Hook_Clear();

                    //throw new Exception("设置Hook失败!");

                }

            }

        }

        //取消钩子事件 

        public void Hook_Clear()

        {

            bool retKeyboard = true;

            if (hHook != 0)

            {

                retKeyboard = UnhookWindowsHookEx(hHook);

                hHook = 0;

            }

            //如果去掉钩子失败 

            if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed");

        }

        //这里可以添加自己想要的信息处理 

        public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)

        {

            if (nCode >= 0)

            {

                KeyBoardHookStruct kbh = (KeyBoardHookStruct)MarshalPtrToStructure(lParam, typeof(KeyBoardHookStruct));

                if (kbhvkCode == (int)KeysS && (int)ControlModifierKeys == (int)KeysControl)  // 截获F8 

                {

                    //MessageBoxShow("快捷键已拦截!不能保存!");

                    Form2 form = new Form2();

                    formTopMost = true;

                    formActivate();

                    formShow();

                    return 1;

                }

                if (kbhvkCode == (int)KeysY

                   && (int)ControlModifierKeys == (int)KeysControl + (int)KeysAlt)  //截获Ctrl+Alt+Y 

                {

                    //MessageBoxShow("不能全部保存!"); 

                    return 1;

                }

                if (kbhvkCode == (int)KeysX)

                {

                    //MessageBoxShow("不能全部保存!");

                    Form2 form = new Form2();

                    formTopMost = true;

                    formActivate();

                    formShow();

                    return 1;

                }

            }

            return CallNextHookEx(hHook, nCode, wParam, lParam);

        }

        #endregion

        private void button1_Click(object sender, EventArgs e)

        {

            Hook_Start();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            Hook_Clear();

        }

    }

}

以上就是关于在dll安装了全局钩子,hook openprocess的部分不能运行全部的内容,包括:在dll安装了全局钩子,hook openprocess的部分不能运行、c++如何用hook禁用鼠标如何让编写、hook技术需要了解windows消息机制吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10638496.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存