Articles of 钩

端口Win32的DLL挂钩到Linux

我有一个程序(NWShader)挂钩到第二个程序的OpenGL调用(NWN)做后处理效果和什么。 NWShader最初是为Windows构build的,通常是现代版本(win32),同时使用DLL导出(以获取Windows加载它并获取一些OpenGL函数)和Detours(挂钩到其他函数)。 我使用的技巧,在检查sysdir之前,Win将在当前目录中查找任何DLL,因此会加载我的。 我有在这个方法redirect的DLL: #pragma comment(linker, "/export:oldFunc=nwshader.newFunc) 将它们发送到我自己的DLL中不同的命名函数。 然后我做任何处理,并从系统DLL调用原来的function。 我需要将NWShader移植到Linux(NWN存在于两种版本中)。 据我所知,我需要做的是共享库(.so文件)。 如果这是在NWN可执行文件(我发现一个shell脚本来处理这个)之前预加载,我的函数将被调用。 唯一的问题是我需要调用原始函数(我会使用各种DLLdynamic加载方法,我认为),需要能够执行类似Detour的内部函数挂钩。 目前,我正在构buildUbuntu 9.10 x64(带有32位编译器标志)。 我在Google上找不到太多帮助,但是我不知道这个* nix社区究竟是指什么的。 我可以编写C ++,但我更习惯于Windows。 作为OpenGL,需要修改与Linux兼容的唯一部分是钩子代码和调用。 有没有一个简单而简单的方法来做到这一点,或者它会涉及重新创buildDetours并dynamic加载原始函数地址?

全局键盘挂钩c

我想写一个全局的键盘钩不允许任务切换。当我GOOGLE了,我发现了很多代码在c#,cpp(和delphi),但我需要一些关于钩子的基本概念(将是最好的,如果例子是在C )。所以,请好好build议资源,链接可以帮助我从C的angular度来理解事物。 PS:我发现了一个很好的工作示例 (适用于winXP和旧版本),但是当我尝试编译代码时,它给了我: 我试着search所有头文件中的“IDC_”常量(MinGW gcc安装和开发者提供的缺省值),但没有运气…如果有人能够编译代码并使其运行,请帮助我。我没有在这里上传源代码,因为有一些头文件的依赖关系,在这种情况下,我不得不在这里发布所有的代码。 winXP是目标环境,但如果我得到它也运行Win7会更好。

检测/挂钩窗口移动/拖动其他外部进程

检测窗口移动/拖动其他进程的最佳方法是什么? 在Windows7 64位 我目前正在使用C ++&C#调查DLL的全局钩子。 这是一个痛苦,因为它不想正常工作。 我用键盘和鼠标钩子取得了一些成功。 但对于窗口消息,我只是不知道什么是错的。 这是我的.dll文件中的代码 #include <windows.h> #include <iostream> #include <stdio.h> HINSTANCE hinst; #pragma data_seg(".shared") HHOOK hhk; WNDPROC realProc; #pragma data_seg() //#pragma comment(linker, "/SECTION:.shared,RWS") compiler error in VC++ 2008 express LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam,LPARAM lParam) { //open the standard out stream for writing freopen("CONOUT$","w+t", stdout); printf("code:%d wparam:%d lparam:%d\n", code, […]

如何拦截Windows 8上的触摸input

我正在写Windows 8的桌面应用程序,并希望当用户点击屏幕(例如)4手指popup。 我发现这个问题: 如何检测敲击(触摸input)全球而不是鼠标点击? 答案提供了3个解决scheme。 第一个不适合我,因为我想写在每个Win8平板电脑上运行的应用程序。 第二个(RegisterPointerInputTarget)效果很好(即使启动面板处于活动状态或城域应用程序正在运行,我的应用程序也会拦截所有可能的触摸input),但是Windows本身开始缺less某些触摸function(例如,我无法滚动开始面板用我的手指了)。 我试图注入触摸input,但没有运气: if (message >= 0x0241 && message <= 0x024F) { DWORD pointerID = LOWORD (wParam); POINTER_TOUCH_INFO pti; GetPointerTouchInfo (pointerID, &pti); InjectTouchInput (1, &pti); } (是的,我已经调用InitializeTouchInjection(10,0x3);之前)另外,我个人不喜欢这种方式,因为文档说只有一个窗口可以注册自己的指针input。 所以我不希望我的应用程序占用这样的资源。 第三个解决scheme(挂钩)工作良好,但我不能拦截从地铁应用程序或开始面板的触摸。 有谁知道如何正确截取Windows 8上的所有触摸input? uiAccess = true不是问题,因为我的应用程序将被签名。 谢谢。

已安装的窗口挂钩列表

如何获取在Windows中全局安装的钩子列表(使用SetWindowsHookEx API)?

我如何使用全局键盘钩子发送密钥?

我试图发送密钥到一个应用程序,它不响应我迄今使用的任何API(SendInput(),PostMessage(),SendMessage()等)。 不过,我testing了Windows的屏幕键盘实用程序,并按下了我需要的键,应用程序很容易地接收到这些键。 如果我理解正确的键盘实用程序使用全局键盘挂钩发送密钥,所以我感兴趣,我怎么可以这样做。 我试图find如何在谷歌可以完成的例子,但没有结果。 谢谢。

检查API是否受到监视(挂钩?)

我的应用程序使用一些像GetProcAddress和CreateProcess这样的API,有时会导致Antiviruses将其标记为恶意,即使它不是。 我想要做的是检查一个特定的API是否被监视或挂钩,如果是,那么我不会调用该部分的代码。 我如何检查某个API是否被挂钩? 这是用C编写的Windows应用程序 谢谢。

用头文件中定义的方法调用SetWindowsHookEx

我正试图添加一个低级别的鼠标挂钩到一个类。 我可以通过在我的CPP文件中放置这个function: LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { //my hook code here return CallNextHookEx(0, nCode, wParam, lParam); } 然后,我在类构造函数中设置钩子,如下所示: HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0); 这适用于拦截鼠标事件,但由于callback函数没有在我的类中定义,它没有访问我的任何类variables。 因此,我尝试在头文件中定义callback函数,如下所示: LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam); 并在我的CPP文件(TMainForm是类): LRESULT CALLBACK TMainForm::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { //my hook code here return CallNextHookEx(0, […]

防止在C ++中重绘窗口

我正在编写一个全局钩子DLL,它需要在一个窗口上使用GDI +做一些绘制来响应一个事件。 我的问题是,正在绘制的窗口不断重新绘制自己,所以我画的东西在我想要之前就被擦掉了。 有什么办法可以防止窗户只要我需要画什么东西? 我的钩子现在是一个WH_CALLWNDPROC钩子。 该绘图是使用GDI +响应消息WM_SIZING 。 我使用GDI +绘制到窗口的DC (即GetWindowDC )。 我正在绘制的是正确绘制的,但是在窗口客户区被重新绘制时几乎立即被擦除。 创build我正在使用的窗口的程序是记事本。 当光标闪烁时,我所画的被擦除。 有谁知道我可以暂时停止绘画的方式? 谢谢!

如何挂钩到Windows应用程序和进程启动?

我试图编写一个程序,将挂钩到应用程序启动并捕获命令行。 不知道从哪里开始,因为我在Windows编程中非常绿色。 将不胜感激任何帮助谢谢