winapi - 防止生成 WM_SETCURSOR 和 WM_NCHITTEST 消息

标签 winapi

我正在制作一个应用程序,它将自身挂接到目标应用程序,并且在被用户激活时,阻止所有键盘和鼠标窗口消息到达目标应用程序的窗口进程。我的应用程序通过将传入的输入消息(例如 WM_MOUSEMOVE)转换为 WM_NULL 来实现这一点,这样窗口过程就不会意识到输入的发生。

问题在于,当鼠标输入时,Windows 还会自动将 WM_SETCURSORWM_NCHITTEST 发送到窗口过程(例如,当应用程序调用 PeekMessage 时)发生。这些消息不会发布到窗口的消息队列中,因此我无法将它们更改为 WM_NULL。

我最初通过子类化窗口过程并简单地忽略那里的 WM_SETCURSORWM_NCHITTEST 来解决这个问题,但是子类化似乎与我正在使用的某些应用程序存在兼容性问题迷上了。

我的问题是:如何首先阻止生成 WM_SETCURSORWM_NCHITTEST OR我如何防止它们到达应用程序的窗口过程。

最佳答案

一些尝试的想法

我刚刚使用 WH_CALLWNDPROCRET Windows Hook 实现了全局/系统范围的 CallWndRetProc(就像它在下面链接的过去帖子中描述的那样)。

http://help.lockergnome.com/windows2/Igor-SetCursor-SetWindowsHookEx--ftopict285504.html

将其与使用 SetSystemCursor 隐藏所有系统光标相结合,可以有效地隐藏大多数应用程序的光标。

如果您想继续攻击此目标应用程序,您可以尝试使用 API Monitor 来诊断正在发生的事情:http://www.rohitab.com/apimonitor

rohitab 的那个人暗示最终会发布他的源代码;他的站点似乎有一些关于 Hooking、Subclassing、Injecting 等的更好的论坛。

听起来您成功地使用了 SetWindowLongPtr(),但是有几种不同的方法可以进入您正在处理的程序的地址空间...

你试过 SetCapture() 了吗?

其他链接

以下是一些可能有用的其他链接:

http://support.microsoft.com/kb/31747

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646262(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633569%28v=vs.85%29.aspx#winproc_subclassing

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648395(v=vs.85).aspx

希望对您有所帮助。祝你好运。

关于winapi - 防止生成 WM_SETCURSOR 和 WM_NCHITTEST 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327750/

相关文章:

delphi - 以编程方式更改快捷方式图标

c++ - 使用 MinGW、freeglut 和 glew 编译简单的静态 OpenGL 4.0 程序

python - Python 3.4 上的 GetProcAddress 奇怪行为

c++ - 以编程方式获取用于在非开发人员 Windows 环境中构建进程或库的 DLL 列表

c# - Win32 不存在 - 我如何声明或引用它?

Windows 7驱动程序ioctl调用

c++ - 为什么 WriteFile 不会运行多次?

c - 串口通信问题(C代码)

c++ - 如何在WASAPICaptureSharedEventDriven中以原始格式保存音频文件

c++ - 如何从连接的控制台执行命令