如何一个DLL种挂两种钩子(100分)

  • 主题发起人 主题发起人 6941941
  • 开始时间 开始时间
6

6941941

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在一个全局钩子里面同时挂上两中钩子 ,WH_CALLWNDPROC 和 WH_GETMESSAGE,这两种钩子分别截获GETTEXT 和 程序自定义消息(WM_USER+7000),然后根据这两种不同消息做不同的操作,比如,得到GETTEXT消息就获取这个控件的句柄,得到自定义消息就显示一个对话框。 能不能给我个如何同时挂上两个钩子的代码例子,如果能在帮我处理下全部的操作就更好了,呵呵,谢谢
 
SetWindowHook两次。DLL中分别有处理这两个消息过程的代码就行了。和一个钩子也没有什么区别啊
 
GETTEXT 和 程序自定义消息(WM_USER+7000) 应该用WH_GETMESSAGE一个钩子就可以吧.<br>WH_GETMESSAGE从消息队列中检索消息,WH_CALLWNDPROC 用与检索发送到窗口过程的消息.<br>安装两个钩子,在分别建立两个钩子处理函数,SetWindowHookEx 两次即可.
 
办法:<br>1、将EXE 和DLL都编译为新文件的资源。<br>2、运行的时候加载了,然后再另存为一个文件。<br>大致上就是这样:<br> &nbsp;用文本编辑器比如记事本创建一个脚本文件(*.rc)来描述字体:<br>MY_EXE ANYOL1 &quot;aa.exe&quot;<br>MY_DLL ANYOL1 &quot;bb.dll&quot;<br> &nbsp; &nbsp;前两个参数你想用什么都可以,它们会用于你的程序。接下来用命令行BRCC32.EXE<br>(在Delphi的Bin目录下)来编译创建资源文件(*.res)。如果你的脚本文件名为<br>MyRes.rc,那么你应该在DOS窗口下输入“BRCC32 MyRes”后回车。<br> &nbsp; &nbsp;BRCC32将在输入处添加.rc,然后建立一个同名的资源文件(不同扩展名)MyRes.res。在你的程序里添加编译指令:<br> &nbsp; &nbsp;{$R MyRes.res}<br> &nbsp; &nbsp;这需要加在默认的编译指令{$R *.DFM}的后面。<br> &nbsp; 添加一个过程从资源中建立文件。例如:<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br> &nbsp;Res : TResourceStream;<br>begin<br> &nbsp;Res := TResourceStream.Create(hInstance, 'MY_EXE', Pchar('ANYOL1'));<br> &nbsp;Res.SavetoFile('aa.exe');<br> &nbsp;Res := TResourceStream.Create(hInstance, 'MY_DLL', Pchar('ANYOL1'));<br> &nbsp;Res.SavetoFile('bb.dll');<br>end;
 
记事本内容<br>myexe exefile x.exe<br>mydll dllfile y.dll<br>存为setup.rc后缀<br><br>写一个批处理文件内容为<br>brcc32 exefile.rc<br><br>编程中加上{$R exefile.res}<br><br>编程释放利用楼上兄弟给你的代码就可以了<br><br>另外,如果想把DLL隐藏<br>SetFileAttributes(Pchar(Files),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM); &nbsp;//设置i文件为系统和隐藏<br><br>files为string类型,为DLL的路径<br><br>运行,即可出现一个exefile.res
 
和wynney说的几乎上一样.<br>制作成资源文件,然后运行的时候用EXEResFile把资源文件释放出来...<br>function EXEResFile(const ResName,ResType,NewFile:String):Boolean;<br>var<br>Res : TResourceStream;<br>begin<br>Result:=True;<br>try<br>Res:= TResourceStream.Create(Hinstance, Resname, Pchar(ResType));<br>try<br>Res.SavetoFile(NewFile);<br>finally<br>Res.Free;<br>end;<br>except<br>Result:=False;<br>end;<br>end;
 
多人接受答案了。
 
后退
顶部