安装钩子 SetWindowsHookE
Syntax
HHOOK SetWindowsHookEx( int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);
Parameters
- idHook
- [in] 指定要安装的钩子的类型.可以是以下一个值:
- WH_CALLWNDPROC
安装之前,系统会将它们发送到目标窗口过程监视消息的钩子。更多的信息,请参阅 CallWndProc 挂钩过程。- WH_CALLWNDPROCRET
安装一个钩子监视消息后他们已由目标窗口过程处理。更多的信息,请参阅 CallWndRetProc 挂钩过程。- WH_CBT
安装一个钩子接收通知对基于计算机培训 (CBT) 的应用程序很有用。更多的信息,请参阅 CBTProc 挂钩过程。- WH_DEBUG
安装一个钩子调试其他钩子程序非常有用。有关详细信息,请参阅挂钩过程 DebugProc- WH_FOREGROUNDIDLE
- Installs a hook procedure that will be called when the application's foreground thread is about to become idle. This hook is useful for performing low priority tasks during idle time. For more information, see the ForegroundIdleProc hook procedure.
- WH_GETMESSAGE
安装一个钩子监视消息发送到消息队列。更多的信息,请参阅 GetMsgProc 挂钩过程。- WH_JOURNALPLAYBACK
安装一个钩子的员额由 WH_JOURNALRECORD 挂接程序以前记录的消息。更多的信息,请参阅指定挂接程序。- WH_JOURNALRECORD
安装一个钩子记录输入到系统消息队列发布消息。此钩可用于录制的宏。更多的信息,请参阅 JournalRecordProc 挂钩过程。- WH_KEYBOARD
安装一个钩子监视键盘消息。更多的信息,请参阅 KeyboardProc 挂钩过程。- WH_KEYBOARD_LL
- Windows NT/2000/XP:
安装一个钩子监视低级键盘输入的事件。更多的信息,请参阅 LowLevelKeyboardProc 挂钩过程。- WH_MOUSE
安装一个钩子子程用来监视鼠标消息。更多的信息,请参阅 MouseProc 挂钩过程。- WH_MOUSE_LL
- Windows NT/2000/XP:
安装一个钩子监视低级鼠标输入的事件。更多的信息,请参阅 LowLevelMouseProc 挂钩过程。- WH_MSGFILTER
安装一个钩子监视对话框、 消息框、 菜单或滚动栏中输入事件生成的消息。更多的信息,请参阅 MessageProc 挂钩过程。- WH_SHELL
安装一个钩子接收通知到外壳应用程序非常有用。更多的信息,请参阅 ShellProc 挂钩过程。- WH_SYSMSGFILTER
安装一个钩子监视对话框、 消息框、 菜单或滚动栏中输入事件生成的消息。挂接程序监视这些相同的桌面作为调用线程中的所有应用程序的消息。更多的信息,请参阅 SysMsgProc 挂钩过程。- lpfn
- [in]
挂接程序的指针。如果 dwThreadId 参数为零,或指定不同的进程创建的线程的标识符,lpfn 参数必须指向一个钩子 DLL 中。否则,lpfn 可以指向一个钩子与当前进程关联的代码中。- hMod
- [in]
包含由 lpfn 参数所指向的挂接程序的 DLL 的句柄。如果参数 dwThreadId 指定由当前进程创建一个线程,如果挂接程序内与当前进程关联的代码,必须将 hMod 参数设置为 NULL。- dwThreadId
- [in]
包含由 lpfn 参数所指向的挂接程序的 DLL 的句柄。如果参数 dwThreadId 指定由当前进程创建一个线程,如果挂接程序内与当前进程关联的代码,必须将 hMod 参数设置为 NULL。
Return Value
如果成功,返回钩子句柄
如果失败,返回NULL
Remarks
SetWindowsHookEx can be used to inject a DLL into another process. A
32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be
injected into a 32-bit process. If an application requires the use of hooks in
other processes, it is required that a 32-bit application call
SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a
64-bit application call SetWindowsHookEx to inject a 64-bit DLL into
64-bit processes. The 32-bit and 64-bit DLLs must have different names.An error may occur if the hMod parameter is NULL and the
dwThreadId parameter is zero or specifies the identifier of a thread
created by another process.Calling the CallNextHookEx function to
chain to the next hook procedure is optional, but it is highly recommended;
otherwise, other applications that have installed hooks will not receive hook
notifications and may behave incorrectly as a result. You should call
CallNextHookEx unless you absolutely need to prevent the notification
from being seen by other applications.Before terminating, an application must call the UnhookWindowsHookEx
function to free system resources associated with the hook.The scope of a hook depends on the hook type. Some hooks can be set only with
global scope; others can also be set for only a specific thread, as shown in the
following table.
Hook Scope WH_CALLWNDPROC Thread or global WH_CALLWNDPROCRET Thread or global WH_CBT Thread or global WH_DEBUG Thread or global WH_FOREGROUNDIDLE Thread or global WH_GETMESSAGE Thread or global WH_JOURNALPLAYBACK Global only WH_JOURNALRECORD Global only WH_KEYBOARD Thread or global WH_KEYBOARD_LL Global only WH_MOUSE Thread or global WH_MOUSE_LL Global only WH_MSGFILTER Thread or global WH_SHELL Thread or global WH_SYSMSGFILTER Global only For a specified hook type, thread hooks are called first, then global hooks.
The global hooks are a shared resource, and installing one affects all
applications in the same desktop as the calling thread. All global hook
functions must be in libraries. Global hooks should be restricted to
special-purpose applications or to use as a development aid during application
debugging. Libraries that no longer need a hook should remove its hook
procedure.Windows 95/98/Me: SetWindowsHookEx is supported by the
Microsoft Layer for Unicode (MSLU). However, it does not make conversions. To
see Unicode messages, notifications, and so forth, you must subclass the window.
To use this version of the API, you must add certain files to your application,
as outlined in Installing and Releasing Hook
Procedures.
安装钩子 SetWindowsHookE的更多相关文章
- linux下svn安装、配置及钩子
一.安装 直接运行命令用YUM安装: yum install subversion -y 二.创建svn版本库目录 mkdir -p /var/svn/svnrepos 三.创建版本库 生成文 ...
- 安装全局消息钩子实现dll窗体程序注入
说明{ 通过设置全局消息钩子来实现dll注入,然后窗体有相关消息请求的时候就会自动加载注入dll, 然后在入口处做处理就可以了.注入方式简单很多,比代码注入和lsp等注入都简单,就不解释了. ...
- XSS 前端防火墙 —— 无懈可击的钩子
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. ...
- C#键盘钩子 鼠标钩子
最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...
- 学习之路三十八:Hook(钩子)的学习
好久没写文章了,还记得年前面试了一家公司,为了检测一下我的学习能力,给了我一个任务,做一个自动登录并自动操作菜单的程序. 花了几天的时间研究了Hook以及使用WindowsAPI操作程序的知识,现在记 ...
- XSS 前端防火墙(3):无懈可击的钩子
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. ...
- 基于C#实现的HOOK键盘钩子实例代码
本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...
- C# Hook钩子实例代码之截取键盘输入,需要的朋友可以参考下
一.关于本文 以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址: http://www.microsoft.com/china/community/program/origin ...
- MFC线程钩子和全局钩子[HOOK DLL]
第一部分:API函数简介 1. SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook, // hook typ ...
随机推荐
- go string []byte相互转换
string 不能直接和byte数组转换 string可以和byte的切片转换 1,string 转为[]byte var str string = "test" var data ...
- UVA - 1401 Remember the Word(trie+dp)
1.给一个串,在给一个单词集合,求用这个单词集合组成串,共有多少种组法. 例如:串 abcd, 单词集合 a, b, cd, ab 组合方式:2种: a,b,cd ab,cd 2.把单词集合建立字典树 ...
- 网页动画插件---Super Scrollorama , TweenMax 和skrollr
SuperScrollorama 是一个用来实现超酷的滚动动画效果的 jQuery 插件. 实现的效果有:文字褪色,飞,旋转,缩放,斯马什,针脚,滑动,隐退,反弹,颜色,扔,移动,视差. 地址:htt ...
- get与post提交方式区别?
1.get <!--表单数据作为HTTP GET请求发送给action 规定的URL,并将数据附加在URL之后,由客户端直接发送给服务器.表单数据不能太长,也不能含有非ASCII码的字符--&g ...
- CodeForces 723C Polycarp at the Radio (题意题+暴力)
题意:给定 n 个数,让把某一些变成 1-m之间的数,要改变最少,使得1-m中每个数中出现次数最少的尽量大. 析:这个题差不多读了一个小时吧,实在看不懂什么意思,其实并不难,直接暴力就好,n m不大. ...
- python 面向对象七 property() 函数和@property 装饰符
一.property引入 为了使对象的属性不暴露给调用者和进行属性值检查,设置了访问属性的接口函数,使用函数访问属性,并可以在函数内部检查属性. >>> class Student( ...
- poj 2391 Ombrophobic Bovines【最大流】
我%--&(¥--,调了一下午,最后发现P赋值1e5能过,赋值1e6就会TLE致死.改了一下午加一晚上然而这是为什么??? 一种常见的建图套路,首先二分答案,注意上界要取大一点,1e9是不行的 ...
- Canvas 入门案例
五. Canvas 入门案例 1. canvas 圆形绘制 <!DOCTYPE html> <html lang="en"> <head> ...
- 递推DP UVA 590 Always on the run
题目传送门 题意:题意难懂,就是一个小偷在m天内从城市1飞到城市n最小花费,输入的是每个城市飞到其他城市的航班. 分析:dp[i][j] 表示小偷第i天在城市j的最小花费.状态转移方程:dp[i][j ...
- 贪心 UVALive 6832 Bit String Reordering
题目传送门 /* 贪心:按照0或1开头,若不符合,选择后面最近的进行交换.然后选取最少的交换次数 */ #include <cstdio> #include <algorithm&g ...