正确使用NativeWindow实现Windows钩子

时间:2009-12-21 20:59:29

标签: c# c++ winapi nativewindow

我没有太多的C ++背景但已成功挂钩窗口并将其msgs转换为我的应用程序可以使用的凸起事件,我开始继承NativeWindow并重写WndProc并确定了我感兴趣的消息,WM_VSCROLL例如,WM_HSCROLL。

首先是否有任何完整的实现可以引发所有常见事件,如keypress,keydown,keyup,mousemove,mousedown,vscroll,hscroll,vresize,hresize of window。我有兴趣确保香港专业教育学院正确实施课程。

其次,如何正确限制NativeWindow生成的事件,以限制实现的干扰。

2 个答案:

答案 0 :(得分:2)

我假设您正在谈论在另一个应用程序中挂钩窗口。这是一个非常重要的问题,wparam和lparam参数可能包含指针而不是简单的值。但是,这些指针仅在您挂钩的窗口的进程的虚拟内存空间中有效。忽略这将为您带来AccessViolation异常。

你必须P / Invoke ReadProcessMemory()来读取指向的结构。这需要针对每条消息进行,您不能指望通用实现。当您挂钩像ListView或TreeView这样的非平凡窗口时,这会变得非常毛茸茸。

答案 1 :(得分:1)

大多数执行此操作的程序使用DL​​L注入来处理拥有该窗口的进程内部的事件。当然,您不能将托管代码注入另一个进程,只有非常小心的本机代码才不会弄乱应用程序状态。

你想要完成什么?挂钩其他应用程序的“窗口”应该是最后的选择。