键盘钩子?
要求:
1.不用全局钩子注入,比如 A.EXE(有一个以上的进程),当某一A.EXE前置时按F12呼出窗体
★如果采用全局钩子,就不需要特别的注入。因为全局钩子会自动加载钩子DLL。这也是为什么全局钩子必须写在DLL中原因。如果不采用全局钩子,因为你要HOOK远进程,所以你必须注入。但是注入之后,就不能直接操作DLL了,因为他和你不在一个进程。解决的方法是,使用DllMain函数。但是DllMain中,不能有引起线程阻塞的代码。变通的方法是,首先禁止线程通知消息,然后创建一个新的线程,在这个新的线程中创建一个窗口,并且,对创建窗口的线程下局部键盘挂钩,检测到F12就ShowWindow...这种方法,根本不需要特意去判断是不是最上面的窗口,因为只有处于焦点的窗口才会收到键盘消息,而你只是下了一个局部挂钩。只有你下了挂钩并且收到键盘消息的窗口,才会去调用你的挂钩。没有收到消息的窗口不会无缘无故出来的。
2.当关闭用来注入DLL的主程序时,还能完成1的功能.各进程间不共享HOOK句柄
★这个相当简单。一旦注入,就是等待LoadLibrary或者说DLLMAIN返回,用来注入的程序就可以返回了。没什么不可以。各进程间不共享HOOK句柄,晕。只要你不把他们放到共享段,那么他们本来就不会共享的。
相当关注