SetWindowsHookEx函数 ( 积分: 50 )

  • 主题发起人 主题发起人 zhou13
  • 开始时间 开始时间
Z

zhou13

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有人能说一下<br>HOOK函数<br>SetWindowsHookEx<br>各个参数的意思?看了MSDN,英文太差,没看懂..<br>HC_ACTION是什么意思??<br>GetCurrentThreadID又是什么意思,用来干吗?<br><br>还有,为什么大部分Hook都需要DLL呢?<br>没有DLL不行么<br><br>也是《Delphi.下深入Windows核心编程》的代码的问题&nbsp;<br>nit&nbsp;Unit1;<br><br>interface<br><br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,&nbsp;Dialogs,<br>&nbsp;&nbsp;StdCtrls;<br>const<br>&nbsp;&nbsp;WM_TestMessage&nbsp;=&nbsp;WM_USER&nbsp;+&nbsp;2000;<br>type<br>&nbsp;&nbsp;TForm1&nbsp;=&nbsp;class(TForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;Button1:&nbsp;TButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;FormCreate(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Button1Click(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;end;<br><br>var<br>&nbsp;&nbsp;Form1:&nbsp;TForm1;<br><br>implementation<br><br>{$R&nbsp;*.DFM}<br>var<br>&nbsp;&nbsp;HookHandle:&nbsp;HHOOK;<br><br>function&nbsp;TestHookProc(Code:&nbsp;Integer;&nbsp;WParam:&nbsp;Longint;Msg:Longint):&nbsp;Longint;stdcall;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Code&nbsp;=&nbsp;HC_ACTION)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;PMsg(Msg)^.Message&nbsp;=&nbsp;WM_TestMessage&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMessage('已经截获该消息');<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;CallNextHookEx(HookHandle,&nbsp;Code,&nbsp;WParam,&nbsp;Longint(@Msg));<br>end;<br><br>procedure&nbsp;TForm1.FormCreate(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);<br>end;<br><br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;PostMessage(self.Handle,WM_TestMessage,0,0);<br>end;<br><br>end.<br><br>谢谢大家回答拉
 
还有,一个DLL或者EXE中的函数或者过程如何知道?<br><br>听说反汇编可以,但是有没有这方面的文章呢??<br>对汇编语言不是很了解啊
 
HHOOK&nbsp;SetWindowsHookEx(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;idHook,&nbsp;//&nbsp;钩子的类型,即它处理的消息类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HOOKPROC&nbsp;lpfn,&nbsp;//&nbsp;钩子子程的地址指针。如果dwThreadId参数为0<br>//&nbsp;或是一个由别的进程创建的线程的标识,<br>//&nbsp;lpfn必须指向DLL中的钩子子程。<br>//&nbsp;除此以外,lpfn可以指向当前进程的一段钩子子程代码。<br>//&nbsp;钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hMod,&nbsp;//&nbsp;应用程序实例的句柄。标识包含lpfn所指的子程的<br>DLL。<br>//&nbsp;如果dwThreadId&nbsp;标识当前进程创建的一个线程,<br>//&nbsp;而且子程代码位于当前进程,hMod必须为NULL。<br>//&nbsp;可以很简单的设定其为本应用程序的实例句柄。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwThreadId&nbsp;//&nbsp;与安装的钩子子程相关联的线程的标识符。<br>//&nbsp;如果为0,钩子子程与所有的线程关联,即为全局钩子。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br>HC_ACTION表示有消息将要处理.<br>系统钩子必须要放在DLL中,线程钩子可以不用&nbsp;GetCurrentThreadID&nbsp;是获得当前的线程的ID
 
全局钩子和系统钩子有什么区别?<br><br>是不是截获自己程序的消息也可以用钩子?,不然那个程序算什么?
 
全局钩子和系统钩子一个意思<br>是不是截获自己程序的消息也可以用钩子?,&nbsp;&nbsp;可以
 
接受答案了.
 

Similar threads

I
回复
0
查看
628
import
I
I
回复
0
查看
607
import
I
I
回复
0
查看
600
import
I
I
回复
0
查看
778
import
I
后退
顶部