gpt4 book ai didi

c++ - SetWindowsHookEx() 监控所有线程 : Must the hook procedure be located in a DLL?

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:02 26 4
gpt4 key购买 nike

SetWindowsHookEx() monitoring all threads: Must the hook procedure be located in a DLL?

我很困惑监控所有线程的钩子(Hook)程序是否必须位于一个 DLL 中。

如以下教程所示,钩子(Hook)程序不需要位于 DLL 中。

http://www.unknowncheats.me/forum/c-and-c/83707-setwindowshookex-example.html

我是不是误会了什么?

最佳答案

  if (!(_hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)))

这并没有错。这两个低级 Hook 与所有其他 Hook 不同,Windows 在将键盘或鼠标消息分派(dispatch)给拥有前台窗口的进程之前在您的进程中调用您的 Hook 回调。不需要也不使用 DLL。您确实需要启动消息循环 (GetMessage/DispatchMessage),Windows 只能在知道您的线程空闲并准备好执行代码时进行回调。

从 Windows 7 SP1 开始,可以为第三个参数传递 NULL。一个错误修复,以前的版本需要一个有效的 DLL 句柄,验证它但没有实际使用它。提供一个并因此确保您的代码与任何 Windows 版本兼容的最佳方法是使用从 LoadLibrary(L"user32.dll") 获得的代码。

请注意与 WH_KEYBOARD Hook 的区别,后者确实需要一个 DLL。最大的区别是它的回调更可靠,因为它在进程内运行,它知道进程的键盘状态。 GetKeyState() 是准确的,无法在 WH_KEYBOARD_LL Hook 中完成相同的操作。今天写这样一个钩子(Hook)是非常痛苦的,如果你需要 Hook 每个进程,UAC 抛出一个障碍(你不能注入(inject)一个提升的进程,除非你自己提升)以及需要写一个 32 位和一个 64 -bit 版本的 Hook 程序和 DLL。

关于c++ - SetWindowsHookEx() 监控所有线程 : Must the hook procedure be located in a DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com