吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11266|回复: 13
收起左侧

[其他转载] 全局HOOK API (C#) 的实现

 关闭 [复制链接]
mycsy 发表于 2008-12-15 20:13
主要实现代码
代码:
[DllImport("user32.dll", CharSet = CharSet.Auto,
           CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        private static extern int SetWindowsHookEx(
            int idHook,
            HookProc lpfn,
            IntPtr hMod,
            int dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        private static extern int UnhookWindowsHookEx(int idHook);


[DllImport("user32.dll", CharSet = CharSet.Auto,
             CallingConvention = CallingConvention.StdCall)]
        private static extern int CallNextHookEx(
            int idHook,
            int nCode,
            int wParam,
            IntPtr lParam);

[DllImport("user32")]
        private static extern int ToAscii(
            int uVirtKey,
            int uScanCode,
            byte[] lpbKeyState,
            byte[] lpwTransKey,
            int fuState);

[DllImport("user32")]
        private static extern int GetKeyboardState(byte[] pbKeyState);

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern short GetKeyState(int vKey);
使用SetWindowsHookEx函数(API函数),指定一个Hook类型、自己的Hook过程是全局还是局部Hook,同时给出Hook过程的进入点,就可以轻松的安装自己的Hook。
代码:
                  // 创建鼠标实例.
                MouseHookProcedure = new HookProc(MouseHookProc);
                //安装 鼠标hook
                hMouseHook = SetWindowsHookEx(
                    WH_MOUSE_LL,
                    MouseHookProcedure,
                    Marshal.GetHINSTANCE(
                        Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

                // 创建键盘实例.
                KeyboardHookProcedure = new HookProc(KeyboardHookProc);
                //安装 键盘hook
                hKeyboardHook = SetWindowsHookEx(
                    WH_KEYBOARD_LL,
                    KeyboardHookProcedure,
                    Marshal.GetHINSTANCE(
                    Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);
卸载Hook UnhookWindowsHookEx()函数(API函数)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

西氏 发表于 2009-10-10 21:39
学习c#中。xiexie
我叫MT 发表于 2009-10-29 07:29
mmc 发表于 2010-1-1 13:18
唉,看了很多hook的用法,可是自己到现在还是不会用,悲哀.....
tkggss 发表于 2010-1-8 20:10
感觉需要学习下c#的api~~
sys009 发表于 2010-7-12 08:15
謝謝..
oklan 发表于 2010-7-14 12:22
需要调用外部DLL,真纳闷.NET为什么不封装这些代码...........
datochan 发表于 2010-8-15 18:25
为了防止灌水,我已将本主题执行下沉操作。
本楼之后的跟贴,当作水贴处理。
xybl255 发表于 2010-9-6 02:11
正在学习中~~

关于在c#里调用windows api,一直半知不解的
411438957 发表于 2010-9-6 18:02
看不懂```
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表