当前位置:编程学习 > C#/ASP.NET >>

.net 全局钩子

第一个问题:看了一些资料,不是说全局钩子的钩子函数必须写在dll中才行吗,可是为什么没这么做也可以,我测试了,肯定的。KeyboardHookProc跟其他所有代码全在一个exe中,为什么能调用掉钩子函数KeyboardHookProc。

  public static int KeyboardHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {


       public void HookStart()
        {
            if (hKeyboardHook == 0)
            {
                // 创建HookProc实例
                KeyboardHookProcedure = new HookProc(KeyboardHookProc);
                hKeyboardHook = SetWindowsHookEx(14, KeyboardHookProcedure, GetModuleHandle(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName), 0);
                if (hKeyboardHook == 0)
                {
                    HookStop();
                    throw new Exception("SetWindowsHookEx failed.");
                }
            }
        }

第二个问题安装钩子的时候,为什么不再主线程中安装钩子就没有效果。。。。。

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(() =>
             {
                 Hook hook = new Hook();
                 hook.HookStart();
             }));
             th.Start();
        }

而下面这样是有效果的。。

        private void Form1_Load(object sender, EventArgs e)
        {
                 Hook hook = new Hook();
                 hook.HookStart();
        }
.net C# 钩子 api --------------------编程问答-------------------- 问题一:因为你的钩子类型是WH_MOUSE_LL,这个是对底层的鼠标输入事件进行监视的,总共有如下四个类型的钩子不写在DLL中:WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL,这些钩子是在哪个线程当中安装的,其钩子函数就在哪个线程中执行,而其他类型是通过把DLL注入目标进程的方式才使得回调函数可以执行

问题二:不懂 --------------------编程问答-------------------- 除
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,