问题标签 [setwindowshookex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2127 浏览

winapi - 使用 WH_GETMESSAGE 调用 setwindowshookex 不适用于注入器以外的任何进程

我之前问过一个关于类似问题的问题,但我相信这次情况有所不同。

我有一个具有标准钩子、取消钩子和 msgProc 函数的 DLL。我在我的主应用程序中加载这个 DLL,然后调用“hook”,如下所示:

问题是,如果我将其设为全局,threadID = 0,则 msgHook 仅捕获加载库的进程的窗口接收到的消息,而不捕获其他任何消息,即使它应该是全局挂钩。

如果我提供某个其他窗口的 threadID,那么我根本不会收到消息。

可能是什么原因?

0 投票
3 回答
5647 浏览

windows - 挂钩特定进程的注册表访问的简单方法

有没有一种简单的方法来挂钩我的代码执行的进程的注册表访问?我知道SetWindowsHookEx和朋友,但它太复杂了......我仍然希望有一种简单的LD_PRELOAD方法Unix......

0 投票
3 回答
3364 浏览

windows - 为什么 Windows 挂钩不会收到某些消息?

Microsoft 不建议将 DirectInput 用于键盘和鼠标输入。因此,我编写了一个输入管理器类,它使用 SetWindowsHookEx 挂钩到 WndProc 和 GetMsg。我相信钩子设置得当,尽管它们看起来是各种问题的原因。

我的 WndProc 和 GetMsg 挂钩都不会收到实际 WndProc 正在接收的任何消息。我的输入管理器从未收到它需要的 WM_INPUT、WM_BUTTON WM_MOUSEWHEEL 和 WM_KEY* 消息。

是什么赋予了?

部分标题:

部分来源:

我不包括消息处理程序的代码,因为它由 149 行组成,其中大部分是消息类型的开关。WndProc 中收到的消息值与我的回调中的不同。

0 投票
2 回答
6337 浏览

c# - Window hooks in c#

Im trying to hook up to other windows from csharp. Im using SetWindowsHookEx, but no luck with converting it fom c++ t c#. I found this thread here but it wasnt solved. The problem is that SetWindowsHookEx returns 0. It includes best code samle i found:

Any help, advices?

0 投票
3 回答
2931 浏览

c++ - 用于 64 位操作系统的系统范围挂钩

我想在 64 位操作系统上执行系统范围的挂钩(使用 SetWindowHook)。

我知道 64 位进程(= proc64)只能加载 64 位 dll(= dll64),而 32 位进程(= proc32)只能加载 32 位 dll(= dll32)。

目前我计划调用 SetWindowHook 两次,一次使用 dll32,一次使用 dll64,预计 proc64s 将加载 dll64,proc32s 将加载 dll32(而 proc64s 的 dll32 和 proc32s 的 dll64 将失败)。

这是正确的方法,还是有“更正确”的方法?

谢谢!:-)

0 投票
1 回答
2791 浏览

c - Hook keyboard from injected DLL using KeyboardProc / SetWindowsHookEx

Note: I am working in plain C. Not C++, not C#.

I am working on a mod. I've already written a working DLL-injector, as well as the DLL to be injected. Everything is going well, apart from the userinput.

I want to be able to use hotkeys, so I tried to setup a keyboardhook using SetWindowsHookEx. The following is my callback function:

And this is how I set it up:

As far as I can tell, the hook gets setup well (I used to have a problem with an invalid parameter, but fixed that by using GetCurrentThreadID). It returns a handle which is not NULL.

But whenever I press a key, there is no output.

To further clarify: The code above is from the injected DLL. So it effectively 'belongs' to the game process. I have allocated a console using AllocConsole, to print debug messages to.

What am I doing wrong?

EDIT: To clarify (even more): the listed code is from the injected DLL. It is not the approach I use to inject the DLL - I wrote a seperate (working!) program to do just that.

It surprises some that I use printf(), since that wouldn't show up, considering I call it from inside the host process. Yes, I do call it from inside the host process, but that is not an issue, because I have already allocated a working console. I used an approach very similar to the one mentioned here

EDIT2: I am not asking why printf() isn't working (because it is), I am asking why this keyboardhook isn't working.

0 投票
1 回答
2446 浏览

c++ - 挂钩 Win32 窗口创建/调整大小/查询大小

我正在尝试“拉伸”现有应用程序。

目标是在不更改该应用程序代码的情况下使现有应用程序变得更大。
一个缺点是拉伸的应用程序不会“注意到”它,因此如果应用程序查询创建的窗口大小,它将看到原始大小而不是调整后的大小。

我设法使用以下方法调整窗口大小SetWindowsHookEx

和:

我面临的问题是我无法让拉伸的应用程序看到原始大小。

例如,如果创建 .NET 表单:

稍后查询大小:

我想要widthheight成为100200不是调整大小的值。我找不到查询现有窗口大小的正确钩子。

挂钩窗口大小查询的正确方法是什么?

0 投票
2 回答
761 浏览

winapi - 拦截按下 Caps Lock 的最佳方法

在 Windows 上拦截 Caps Lock 按钮以制作像 Launchy 这样的程序的最佳方法是什么?

目前,我正在使用SetWindowsHookEx设置一个低级挂钩,但这对我来说有点太低级了,因为我不想拦截其他试图激活低级别的程序。我正在寻找最高级别的拦截,它仍然可以阻止打开 Caps Lock 本身......有更好的建议吗?

0 投票
0 回答
1709 浏览

winapi - 如何检查 SetWindowsHookEx 挂钩是否仍在工作?(Win7错误解决方法)

我正在用 MS VisualC++ 编写程序。我设置了一个键盘挂钩hHook = SetWindowsHookEx(13,MyProc,GetModuleHandle(NULL),0);

Win7 中有一个我可以重现的错误,它禁用了我的钩子。当这个错误发生时,hHook仍然是TRUE,但UnhookWindowsHookEx(hHook)返回FALSE

但是,我只想在它被禁用时重新启动钩子,所以我不能使用UnhookWindowsHookEx.

如何检查钩子是否仍然有效?类似的东西GetHookStatus(hHook)

我发现这个 Win7 错误是由一些超时或“垃圾收集”引起的,但我更容易检查钩子状态并在需要时重新启动。我不是专业人士,只是将编码作为一种爱好,主要是出于个人需求。

谢谢你。

0 投票
1 回答
3114 浏览

visual-c++ - WM_PAINT Hook 使用 SetWindowsHookEx

这是我的代码

我正在尝试获取 WM_PAINT 事件...目前我正在尝试捕获所有事件。我在哪里失踪?