草庐IT

SetWindowsHookex

全部标签

c++ - SetWindowsHookEx WH_KEYBOARD_LL 右移不响应

我尝试在c++中使用WindowsAPI,但SetWindowsHookExWH_KEYBOARD_LL似乎没有从正确的Shift键(Shift键位于qwerty键盘右侧,Enter键下方)。它确实适用于左Shift键。我该如何解决这个问题???#include"stdafx.h"#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeHHO

windows - 关于 SetWindowsHookEx() 和 Hook 的问题

这里是一些背景信息。我正在通过AppInit_DLLs注册表项替换已在dll注入(inject)技术中使用的dll。它的目的是出现在每个进程中,并在GDI32.dll中设置Hook以收集有关打印的信息。这是一种获得我们想要的东西的时髦方式。.dll本身已有10多年的历史(用VisualStudio97编写),我们想用比注入(inject)的dll侵入性更小的东西替换它。看起来SetWindowsHookEx()可能就是我们要找的东西。我一直遇到一些麻烦,但我也和同事讨论过这棵树是否值得吠叫。以下是一些我们无法确定的问题:当我们从dllHook例程时,例如来自GDI32.dll的Star

c++ - SetWindowsHookEx、KeyboardProc 和非静态成员

我正在创建一个键盘Hook,其中KeyboardProc是类CWidget的静态成员。classCWidget{staticLRESULTCALLBACKKeyboardProc(intcode,WPARAMwParam,LPARAMlParam);};我想在CWidget::KeyboardProc中调用CWidget的非静态成员。最好的方法是什么?KeyboardProc没有任何我可以传递“this”指针的32位DWORD。 最佳答案 鉴于您可能一次只想安装一个键盘Hook,只需将静态pThis成员添加到您的类中即可://Wid

为什么 SetWindowsHookEx 采用 HINSTANCE 参数?

有开发者问了这样一个问题:既然SetWindowsHookEx的第一个参数总是会被转换为一个文件名,那为什么它的传参类型是HINSTANCE呢?这岂不是多此一举?原因是这样的:在16位Windows系统上,它不是这样工作的。16位Windows上根本就没有“钩子注入”的概念。所有16位Windows应用程序都是运行在同一个地址空间,所以就没有必要将代码注入到其他程序中。所以,就没有必要将实例句柄转换为一个文件名来注入代码。实际的工作原理是这样的:实例句柄将会被用来增加引用计数,从而钩子函数就不会被意外释放掉。当钩子被卸载的时候,模块的引用计数会自动减一。即使到了32位Windows,窗口管理器

windows钩子、SetWindowsHookEx函数的使用

Windows钩子简介Windows钩子技术是一种Windows操作系统提供的机制,允许程序在特定事件发生时拦截并处理操作系统消息、事件或其他程序的输入和输出。钩子可以被用来监视和记录用户的操作、增加或修改某些功能,或者对某些事件作出反应,以此来实现各种自动化和定制化的需求。钩子技术可以通过两种方式实现:全局钩子和局部钩子。全局钩子会拦截所有应用程序的消息和事件,而局部钩子则只拦截指定的应用程序或线程的消息和事件。如果是全局钩子或者跨进程钩子,钩子的回调函数需要写在.dll动态链接库文件中,在使用SetWindowsHookEx函数为进程挂载钩子后,被挂载钩子的进程会去加载内存中的.dll文件

windows - 在 user32.dll 中找不到 SetWindowsHookEx 程序

操作系统:Windows1064位go版本:go版本go1.7windows/amd64我在运行代码时收到以下错误消息。我尝试以管理员权限运行它,但仍然无法正常工作。我引用了以下链接,https://github.com/AllenDang/w32https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspxpanic:FailedtofindSetWindowsHookExprocedureinuser32.dll:Thespecifiedprocedurecouldnotbefound.

windows - 在 user32.dll 中找不到 SetWindowsHookEx 程序

操作系统:Windows1064位go版本:go版本go1.7windows/amd64我在运行代码时收到以下错误消息。我尝试以管理员权限运行它,但仍然无法正常工作。我引用了以下链接,https://github.com/AllenDang/w32https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspxpanic:FailedtofindSetWindowsHookExprocedureinuser32.dll:Thespecifiedprocedurecouldnotbefound.

c++ - 为什么必须将 SetWindowsHookEx 与 Windows 消息队列一起使用

我一直在尝试用钩子(Hook)做一些事情,但我不明白为什么钩子(Hook)必须与消息队列一起使用hook=SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,NULL,0);MSGmsg;while(GetMessage(&msg,NULL,0,0)>0){TranslateMessage(&msg);DispatchMessage(&msg);}UnhookWindowsHookEx(hook);为什么这样的东西不起作用?hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,0);cin>>aKe

c++ - 为什么必须将 SetWindowsHookEx 与 Windows 消息队列一起使用

我一直在尝试用钩子(Hook)做一些事情,但我不明白为什么钩子(Hook)必须与消息队列一起使用hook=SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,NULL,0);MSGmsg;while(GetMessage(&msg,NULL,0,0)>0){TranslateMessage(&msg);DispatchMessage(&msg);}UnhookWindowsHookEx(hook);为什么这样的东西不起作用?hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,0);cin>>aKe

windows - 如何正确使用 SetWindowsHookEx & CallNextHookEx

我可以正确设置一个WindowsHook,但我对MSDN中的一行感到困惑,它说“调用CallNextHookEx函数以链接到下一个Hook过程是可选的,但强烈建议这样做;否则,其他应用程序有安装的Hook将不会收到Hook通知,因此可能会出现错误行为。您应该调用CallNextHookEx,除非您绝对需要防止通知被其他应用程序看到。”。我想成为一名优秀的编程公民,调用下一个钩子(Hook)。但是,我的钩子(Hook)程序看起来像这样:LRESULTCALLBACKCBTProc(intcode,WPARAMwp,LPARAMlp){if(code!=HCBT_CREATEWND){//