level 7
OOPhappy
楼主
前几天买了一个吧友的书《Delphi下深入Windows核心编程》,真心是个好东西。现在在自学。其中关于钩子原理一节,自己想模仿书上编一个程序,截获电脑上弹窗的程序。就是想截获QQ、搜狐新闻这种弹窗。可是貌似不成功。
这是安放的钩子:
HookHandle := SetWindowsHookEx(WH_CBT,TestHookProc,HInstance,0);
这个钩子只能截获当前程序的消息。书上说将SetWindowsHookEx(WH_CBT,TestHookProc,HInstance,0)中最后一个设置为0是截获所有的系统消息。然后WH_CBT表示截获的消息类型是发生激活,创建,关闭、极小化,极大化,移动和改变一个窗体等。下面是处理截获的消息。
function TestHookProc(Code:Integer;WParam:Longint;Msg:Longint):Longint;stdcall;
begin
if(Code = WH_CBT) then
Form1.Memo1.Lines.Add('something happend!');
Result := CallNextHookEx(HookHandle,Code,WParam,Longint(@Msg));
end;//这个是消息处理,我只是截获到了消息就显示一次可是到运行时。当我运行电脑上-附件-计算器的时候,系统没有截获到消息,而且该消息只对当前自己编写的Delphi程序有效。
现在请大神或者高手看看我的代码有什么问题?任何提示都可以砸过来。
2014年02月20日 08点02分
1
这是安放的钩子:
HookHandle := SetWindowsHookEx(WH_CBT,TestHookProc,HInstance,0);
这个钩子只能截获当前程序的消息。书上说将SetWindowsHookEx(WH_CBT,TestHookProc,HInstance,0)中最后一个设置为0是截获所有的系统消息。然后WH_CBT表示截获的消息类型是发生激活,创建,关闭、极小化,极大化,移动和改变一个窗体等。下面是处理截获的消息。
function TestHookProc(Code:Integer;WParam:Longint;Msg:Longint):Longint;stdcall;
begin
if(Code = WH_CBT) then
Form1.Memo1.Lines.Add('something happend!');
Result := CallNextHookEx(HookHandle,Code,WParam,Longint(@Msg));
end;//这个是消息处理,我只是截获到了消息就显示一次可是到运行时。当我运行电脑上-附件-计算器的时候,系统没有截获到消息,而且该消息只对当前自己编写的Delphi程序有效。
现在请大神或者高手看看我的代码有什么问题?任何提示都可以砸过来。