草庐IT

SetWindowsHookex

全部标签

windows - 当前线程的 SetWindowsHookEx 返回 null

我在尝试为当前线程获取键盘钩子(Hook)时遇到问题。首先,我需要为所有线程获取键盘输入,所以我使用了:hHook=SetWindowsHookEx(WH_KEYBOARD_LL,mKeyboardProc,GetModuleHandle(NULL),0);这工作正常,但是当我尝试将dwThreadId参数(最后一个)设置为GetCurrentThreadId()时,SetWindowsHookEx返回NULL。可能是什么问题?谢谢。 最佳答案 WH_KEYBOARD_LL是一个全局钩子(Hook),如documentation中所

windows - 检测/ Hook 其他外部进程的窗口移动/拖动

检测其他进程的窗口移动/拖动的最佳方法是什么?在Windows764位中我目前正在研究使用C++和C#的DLL中的全局Hook。这很痛苦,因为它不想正常工作。我在键盘和鼠标Hook方面取得了一些成功。但对于窗口消息,我只是不知道出了什么问题。这是我的.dll文件中的代码#include#include#includeHINSTANCEhinst;#pragmadata_seg(".shared")HHOOKhhk;WNDPROCrealProc;#pragmadata_seg()//#pragmacomment(linker,"/SECTION:.shared,RWS")compile

c# - C# 中的 SetWindowsHookEx

我正在尝试Hook第3方应用程序,以便我可以在其屏幕上绘图。在屏幕上绘图很容易,我不需要任何帮助,但我似乎在使用SetWindowsHookEx处理WH_GETMESSAGE时遇到了问题。我不知道要为最后两个参数传递什么。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowDr

c# - SetWindowsHookEx 失败并出现错误 126

我正在尝试使用Gma.UserActivityMonitor一个项目中的库,我遇到了一个我自己无法克服的错误。在HookManager.Callbacks.cs文件中有一个名为EnsureSubscribedToGlobalMouseEvents的静态方法,其代码如下(或多或少):varasm=Assembly.GetExecutingAssembly().GetModules()[0];varmar=Marshal.GetHINSTANCE(asm);s_MouseHookHandle=SetWindowsHookEx(WH_MOUSE_LL,s_MouseDelegate,mar,

挂接到其他线程时setWindowShookex返回null

当我调用setWindowShookex(wh_getMessage,myhookproc,hin,threadID)时,挂钩代码在dll中。如果threadIDparam是threadID,则此函数返回0,而getLasterRor返回87,如果threadID为0,则返回正常值。[indion.dll]LRESULTCALLBACKMYHOOKPROC(intcode,WPARAMw,LPARAMl);voidload_hook(DWORDthreadId){HINSTANCEhin=::GetModuleHandle(TEXT("InjectionHook.dll"));HHOOKhoo

c++ - SetWindowsHookEx - Dll 注入(inject)错过了前几次调用

我正在尝试使用SetWindowsHookEx来捕获对java.dll中API的调用。所以我创建了另一个dll,并使用setwindowsHookEx注入(inject)到所有其他进程中g_hHook=SetWindowsHookEx(WH_CALLWNDPROC,JLoadSetFunc,g_hHookDll,0)问题如下:在trycatch来自某个进程的调用时,我注意到我的dll在已经执行了几次对Hook函数的调用后附加到该进程。所以问题是我的Hook机制错过了HookAPI的前几次调用。请建议或评论此问题以指导我。我被这个卡住了。 最佳答案

C++ 控制台应用程序,SetWindowsHookEx,永远不会调用回调

我有一个带有嵌入式v8引擎的小型控制台应用程序,我想添加一个Hook来注册按键事件。这一切在我使用Qt和QtScript之前都有效,但我将它全部移植到VC++2008中的直接C++。应用程序编译并运行,但从未调用Hook,这是相关代码:在主函数中HWNDhwndC=GetConsoleWindow();HINSTANCEhInst=(HINSTANCE)GetWindowLong(hwndC,GWL_HINSTANCE);if(SetWindowsHookEx(WH_KEYBOARD_LL,HookProc,hInst,NULL)==0){printf("Failedtosethook

c++ - 卸载注入(inject)的 DLL

我有一个DLL,我使用SetWindowsHookEx注入(inject)到其他进程中。在DLL中,我通过调用GetModuleHandleEx来增加模块的引用计数器,这样我就可以控制何时卸载模块。此时,来自这两个API调用的模块引用计数“应该”为2。当调用进程关闭时,它调用UnhookWindowsHookEx,将引用计数递减为1。DLL有一个线程等待一些事情,其中​​之一是调用的进程的句柄>设置WindowsHookEx。当进程消失时,DLL会进行一些清理,终止所有线程,清理内存和句柄,然后调用FreeLibraryAndExitThread。这会递减计数器并卸载DLL。这是我的问

.net - 来自 Windows 服务的全局键盘 Hook

是否可以从windows(xp和7)服务编写全局键盘Hook?(使用SetWindowsHookEx在系统服务中不起作用) 最佳答案 SetWindowsHookEx的文档说:orwithallthreadsinthesamedesktopasthecallingthread.所以需要关联同一个桌面(即使不考虑终端服务也会有多个桌面:普通桌面、安全桌面(用于UAC和登录)和屏保)。由于服务不与交互式session关联(并且从WindowsV6开始,不能关联)您将需要用户session中的一个进程来执行Hook,并与后端服务通信(例如

c++ - 如何修改运行时加载的 DLL 的导入地址表

我想Hook在运行时从加载的DLL调用的函数,我使用了“WindowsViaC/C++”一书中的CAPIHook类(通过安装系统范围Hook完成的DLL注入(inject)和通过修改IATHook)但只有当DLL名称/符号存在于可执行文件的IAT中时,此代码才有效。(即隐式DLL链接)这是动态链接库代码:CAPIHook::CAPIHook(PSTRpszCalleeModName,PSTRpszFuncName,PROCpfnHook){//Note:thefunctioncanbehookedonlyiftheexportingmodule//isalreadyloaded.Aso