SetWinEventHook监听全局窗口激活事件
HWINEVENTHOOK hHook = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, // 监听窗口激活事件 EVENT_SYSTEM_FOREGROUND, // 仅监听这一种事件 NULL, // 全局监听(不限于当前进程) WinEventProc, // 回调函数 0, 0, // 进程和线程 ID(0 表示全局) WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS // 异步回调 );
`SetWinEventHook` 是 Windows API 中用于设置事件钩子的函数,以下是代码中每个参数的解释:
1. **`eventMin` 和 `eventMax`**
• 这两个参数指定要监听的事件范围。
• 示例中均为 `EVENT_SYSTEM_FOREGROUND`,表示仅监听窗口激活事件(即窗口获得焦点时触发的事件)。
2. **`hmodWinEventProc`**
• 指向包含回调函数的 DLL 句柄。
• 示例中为 `NULL`,表示回调函数位于当前模块中,而非外部 DLL。
3. **`lpfnWinEventProc`**
• 指向事件回调函数的指针,这里是 `WinEventProc`。
• 当指定事件发生时,系统会调用此函数处理事件。
4. **`idProcess` 和 `idThread`**
• 指定要监听的进程 ID 和线程 ID。
• 示例中均为 `0`,表示监听所有进程和线程的事件(全局监听)。
5. **`dwFlags`**
• 控制钩子行为的标志位,示例中组合了以下两个标志:
◦ `WINEVENT_OUTOFCONTEXT`:回调函数在调用进程的上下文中执行(异步),无需映射到目标进程。
◦ `WINEVENT_SKIPOWNPROCESS`:忽略当前进程生成的事件,避免重复处理。
### 补充说明
• **返回值 `hHook`**:成功时返回事件钩子句柄,需保存以便后续调用 `UnhookWinEvent` 卸载钩子。
• **回调函数原型**:需符合 `WINEVENTPROC` 格式,接收事件类型、窗口句柄等参数。
如需进一步了解事件常量或回调函数实现细节,可参考 [Microsoft 官方文档](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwineventhook)。
浙公网安备 33010602011771号