我正在尝试在Windows上的其他进程(我可能不知道进程ID)中挂接API(例如,MessageBox()),我知道我必须使用SetWindowsHookEx()函数。但是,我仍然有三个问题:1)SetWindowsHookEx()函数能否使Hook全局化,即不限于当前进程?(当应用程序调用这个API时,它被钩住了吗?)2)如果我想把待hook的API替换成自己的函数,怎么办?3)看了很多资料,找到了“hookprocedure”或者“hookfunction”这个词。我该如何理解呢?目前,我将它作为我将用来替换API的函数(再说一遍,MessageBox)。
我正在创建一个控制台应用程序,我想在其中记录按键操作(例如向上箭头)。我创建了一个低级键盘Hook,它应该捕获任何线程中的所有按键并调用我的回调函数,但它不起作用。当我按下一个键时,程序会暂停一点,但从不调用回调。我检查了文档,但没有找到任何东西。我不知道是我使用的SetWindowsHookEx()不正确(据我所知它成功创建了钩子(Hook))还是我的回调函数不正确!我不确定怎么了!预先感谢您的帮助。#include"Windows.h"#includeusingnamespacestd;HHOOKhookHandle;LRESULTCALLBACKkeyHandler(intnCo
如果一个应用程序(例如我的应用程序,或在外部进程中)调用SetWindowsHookEx,我是否可以取消Hook?请记住,不是我首先创建了钩子(Hook),所以我没有任何类型的变量或指向原始钩子(Hook)的指针。 最佳答案 不,没有。回到今天(前NT时代),您可能会使用获得的HHOOK玩一些游戏,因为返回的HHOOKwasalinkinthechainofhooks被称为。即便如此,我也不确定这是否可能。今天,Windows不会将链中下一个Hook的调用委托(delegate)给您(因此不推荐使用CallNextHookEx的参数
SetWindowsHookEx和SetWinEventHook之间的主要区别是什么(工作方式/依赖性/用途/最低要求)?我对使用C#/.Net从Windows服务拦截与运行Windows应用程序相关的事件很感兴趣。 最佳答案 SetWindowsHookEx设置低级钩子(Hook),可以拦截和重写多个系统范围的事件和消息(例如捕获和重写键盘输入)。SetWinEventHook允许您在没有窗口的情况下监听窗口事件。它的级别更高,对系统的干扰更小。从服务中运行其他应用程序都不需要这些。查看System.Diagnostics.Pro
#include#include#define_WIN32_WINNT0x501#includeusingnamespacestd;HHOOKhKeyboardHook=0;LRESULTCALLBACKKeyboardCallback(intcode,WPARAMwParam,LPARAMlParam){cout循环进行时每次按键时的这段代码应该在控制台上打印消息并创建一个文件,但什么也没有发生。我做错了什么? 最佳答案 我会引用anothertopic:ConsolewindowsarehandledentirelybyCSRS
我正在使用以下代码设置一个全局钩子(Hook):SetWindowsHookEx(WH_MOUSE_LL,MouseProc,NULL,0)我设置了一个断点,以便在我第一次运行应用程序时可以看到调用了MouseProc方法。这有效,但在第一次之后不再被调用。Hook是否自动删除,我如何获得它以便hook自动保留?我正在为Windows编写此应用程序,这是一个C++win32项目。 最佳答案 Ihaveabreakpointset这足以说明问题了。调试器当然会中断。这可以防止将更多的鼠标消息传递到具有焦点的窗口。Windows忍受了5
我正在尝试用Python编写一个程序,它知道何时显示警告框/对话框。它处理多个显示器,我希望它在任务栏图标闪烁、弹出错误/通知等时在辅助显示器上显示可视化。据我所知,检测这些事件的方法是使用消息Hook,如下所述:http://msdn.microsoft.com/en-us/library/ms632589%28v=vs.85%29.aspx我什至幸运地找到了一个从Python访问SetWindowsHookEx函数的示例。(此特定示例使用鼠标信号,但我可以更改常量以监听不同的消息)。http://www.python-forum.org/pythonforum/viewtopic.
我正在研究DLL注入(inject),但得到的错误是hook进程失败:87参数不正确目标进程和dll都是64位的。注入(inject)代码是:BOOLHookInjection(TCHARtarget[],TCHAR*dll_name){//https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx//SetWindowsHookExcanbeusedtoinjectaDLLintoanotherprocess.A32-bitDLLcannotbeinjectedintoa64-bitp
我在WM_MOUSE上定义了一个全局钩子(Hook),它可以完美运行一段时间。每次鼠标移动时,它都会向特定窗口发送一条消息。在某个随机时间后,Hook停止发送消息。如果我注销并注册Hook,它会再次运行。我想Windows中发生的某些特定事件会导致Hook停止,但我找不到是什么。有什么想法吗?编辑:当Hook不再事件时,我将调试器附加到其他进程,并且我观察到dll不再加载。什么会导致Hookdll卸载?Edit2:我发现任何进程中的MouseHookProcdll崩溃都会从它加载的每个进程中卸载hookdll。我在我的代码中找不到崩溃的原因。可能是某种竞争条件或其他什么?这是Hookd
我试图Hook例如记事本但没有成功。制作一个全局钩子(Hook)似乎工作正常。在XPSP2上测试。编辑:修改后的代码现在可以工作了。MyDLL代码#include#include#includeHINSTANCEhinst;#pragmadata_seg(".shared")HHOOKhhk;#pragmadata_seg()//#pragmacomment(linker,"/SECTION:.shared,RWS")compilererrorinVC++2008expressLRESULTCALLBACKwireKeyboardProc(intcode,WPARAMwParam,LP