消息拦截,hook。请看问题:
http://www.csdn.net/expert/topic/115/115353.shtm
http://www.csdn.net/expert/topic/115/115353.shtm
解决方案 »
- 数组如何释放?
- idtcpclient如何将memo1中的文字发送出去?
- 问一个有关delphi操作sql2000数据库的小问题,请大侠们帮帮忙,在线等!!!
- 在一个明细表中增加一个计算字段显示记录的序号
- 急:COM对象创建后,在COM+中就处于激活状态,如何设置为即时激活(JIT)?
- 关于Speech的语音问题(不断加分中......)有空也来UP下.
- Tedit的Onchange事件问题
- 急!!!WM_SYSKEYDOWN消息怎么用?????
- ?请教高手一个数据库方面的问题
- 一个关于数据库更新的问题
- 二进制代码插入文件开头操作失败?!请看代码,指教啊!
- DELPHI6抢先研究:WebService/SOAP
uses
windows, messages, dialogs;//我喜欢用showmessage来测试
var
hookhandler:hhook;
ah:hwnd;//ah 是dll中的全程变量
这是钩子函数:
function hookhandler(iCode:integer;wParam,lParam:longint):longint;stdcall;
begin
if iCode <0 then
hookhandler:=callnexthookex(hkhnadle,icode,wparam,lparam);if iCode \>=0 then
if PCWPSTRUCT(lParam)^.message=WM_CREATE then
if PCREATESTRUCT(CWPSTRUCT(lParam)^.lparam)^.lpszName='test1' then
begin
ah:=CWPSTRUCT(lParam)^.hwnd;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 这里的ah当然是个在这个dll中定义的hwnd类型,我测试过,在这里得到了
//窗口的句柄。
//但是,但是好象不能正确的传递出dll。为什么?
// 该如何做?
我的程序不是很复杂,除了在这里被赋值外,别的地方只是读.不信你自己可以试试,比如:
showmessage(inttostr(ah));你可以看到得到的hwnd的值,然后,在主程序(就是调用这个dll的程序)中用showmessage(inttostr(findwindow(nil,'test1'))),两个值绝对是一样的.
好了,在这个dll中另一个函数取这个dll中的全程变量ah.见function gethandle. ·
·
·end; function gethandle:hwnd;stdcall;
begin
if ah<>0 then result:=ah
else result:=-1; //这个函数总是得到结果-1,是什么问题?
(其实hwnd这么赋值没什么问题的。系统会把它解释成一个很大的数....)
在主程序中,我们发现ah根本就没有返回先前得到的hwnd,事实上,ah的值是0谢谢您的回答但是我看起来还是有点吃力,因为我是刚从vb转过来学delphi的,可以话,您可以打出一个完整的dll和调用它的方法么??
恩。。我们以oicq为例子,想每当它产生“发送消息”这个窗口的时候,我们获取,行么??对不起,我真的看了很久,自己也试了几次了,依旧连运行都通不过看在186分不少的面子上,请再帮帮我这个菜鸟吧
btw,有空来我主页玩,www.meetbeauty.het
再次谢谢您!!
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if iCode = HSHELL_WINDOWCREATED then
begin
//wParam 就是被创建窗口的句柄。
end;
end;
http://myhome.humen.com/meetbeauty/meetbeauty.exe 来这里看我做的电子书吧是情感散文类的529k,用瑞星12.35杀毒了的,绝对精彩哦!!
http://myhome.humen.com/meetbeauty/meetbeauty.chm 200多k
本书的exe版本已经被《e类出版物》收录可以去看看哦