WinAPI: SetWindowsHookEx

提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中.

SetWindowsHookEx(
 idHook: Integer;  {钩子类型}
 lpfn: TFNHookProc; {函数指针}
 hmod: HINST;    {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0}
 dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}
): HHOOK;      {返回钩子的句柄; 0 表示失败}

//钩子类型 idHook 选项:
WH_MSGFILTER    = -1; {线程级; 截获用户与控件交互的消息}
WH_JOURNALRECORD  = 0; {系统级; 记录所有消息队列从消息队列送出的输入消息, 在消息从队列中清除时发生; 可用于宏记录}
WH_JOURNALPLAYBACK = 1; {系统级; 回放由 WH_JOURNALRECORD 记录的消息, 也就是将这些消息重新送入消息队列}
WH_KEYBOARD    = 2; {系统级或线程级; 截获键盘消息}
WH_GETMESSAGE   = 3; {系统级或线程级; 截获从消息队列送出的消息}
WH_CALLWNDPROC   = 4; {系统级或线程级; 截获发送到目标窗口的消息, 在 SendMessage 调用时发生}
WH_CBT       = 5; {系统级或线程级; 截获系统基本消息, 譬如: 窗口的创建、激活、关闭、最大最小化、移动等等}
WH_SYSMSGFILTER  = 6; {系统级; 截获系统范围内用户与控件交互的消息}
WH_MOUSE      = 7; {系统级或线程级; 截获鼠标消息}
WH_HARDWARE    = 8; {系统级或线程级; 截获非标准硬件(非鼠标、键盘)的消息}
WH_DEBUG      = 9; {系统级或线程级; 在其他钩子调用前调用, 用于调试钩子}
WH_SHELL      = 10; {系统级或线程级; 截获发向外壳应用程序的消息}
WH_FOREGROUNDIDLE = 11; {系统级或线程级; 在程序前台线程空闲时调用}
WH_CALLWNDPROCRET = 12; {系统级或线程级; 截获目标窗口处理完毕的消息, 在 SendMessage 调用后发生}

时间: 2024-08-02 23:46:45

WinAPI: SetWindowsHookEx的相关文章

Delphi与Windows API专题

Delphi调用WinAPI 字符及字符串函数(15): CharNext.CharPrev Delphi调用WinAPI 字符及字符串函数(14): CharToOem.OemToChar Delphi调用WinAPI 字符及字符串函数(13) Delphi调用WinAPI 字符及字符串函数(12): lstrlen - 串长度 Delphi调用WinAPI 字符及字符串函数(11) Delphi调用WinAPI 字符及字符串函数(10) Delphi调用WinAPI 字符及字符串函数(9)

windows常用 API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

windows常用API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

代码-做一个记录回放的钩子程序出现了一些问题求教

问题描述 做一个记录回放的钩子程序出现了一些问题求教 void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } 中提示(HOOKPROC)类型转换无效,请问是咋回事 解决方案 把这个函数定义前面加一个s

调用WinApi实现邮槽通信C/S实例

Just a test.高手无视. 服务端: //Code by Pnig0s1992 //Date:2012,3,19 #include <stdio.h> #include <Windows.h> VOID UseMailSlot(LPTSTR lpMailSlotName); int main(int argc,char **argv) { LPTSTR lpSlotName = TEXT("\\\\.\\mailslot\\first_slot"); U

c#使用WINAPI进行读取写入配置文件

我们c#读写配置文件通常用IO对文件进行读写.我觉得使用winapi的Kernel32.dll 对ini文件读取更好更方便一些 对ini文件读写 我们可以使用Kernel32.dll 中的WritePrivateProfileString(写入),GetPrivateProfileString(读入字符串) ,GetPrivateProfileInt(读入整型值)三个方法.下面我介绍着三个方法 一.将信息写入.INI文件中. 1.所用的WINAPI函数为: WritePrivateProfile

什么是WinAPI

视窗操作系统应用程序接口(Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的内核应用程序编程接口的称法.它设计为由C/C++程序调用,而且它也是应用软件与Windows系统最直接的交互方式.而大多数驱动程序所需要的对Windows系统的更底层次访问接口,由所用版本的Windows的Native API来提供接口. Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具,以使程序员开发使用Wi

如何使用C#操作WinAPI

Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用. 主要使用的格式就是:   using System.Runtime.InteropServices; namespace TestWinAPI1 {class Program {static void Main(string[] args) { Beep(100, 100); } [DllImport("kernel32", CharSet = Char

c语言-关于winAPI下拉列表问题

问题描述 关于winAPI下拉列表问题 我想在窗口里面创建一个下拉列表框,就是类似设置波特率那种,我是用纯C写的,请问有相关的控件吗,参数是什么?没有的话需要怎么设计呢?求老司机带路,谢谢