大家帮我看看这个钩子哪里有错误呀 ( 积分: 100 )

  • 主题发起人 主题发起人 jiangzhang3942
  • 开始时间 开始时间
J

jiangzhang3942

Unregistered / Unconfirmed
GUEST, unregistred user!
Function MsgHookProc(nCode:integer;WPARAM:wParam;LPARAM:lParam):LRESULT;Stdcall;
var
RichEditTest : array[0..100000] of char;
szText : array[0..256] of char;
S : string;
H : integer;
begin
if nCode=HCBT_DESTROYWND then
begin
FrmHandle:=FindWindowEx(GetForegroundWindow,0,'#32770',nil);
if wParam=FrmHandle then
begin
H := GetForegroundWindow;
GetWindowText(H, @szText, 255);
S := String(sztext);
if (pos('与',S) > 0) then
begin

H:=GetDlgItem(H,0);


SendMessage(H,WM_GETTEXT,100000,Integer(@RichEditTest));

Messagebox(0,pchar(string(RichEditTest)),'',MB_OK);



end;
Result:=0;

end
else Result:=CallNextHookEx(HookHandle,nCode,WParam,LParam);
end
else Result:=CallNextHookEx(HookHandle,nCode,WParam,LParam);
end;

我想在窗口关闭之前得到对话框得内容,写的钩子,但是得到得总是空,
但是我要是用句柄查看器得到他得句柄,然后用SendMessage(H,WM_GETTEXT,100000,Integer(@RichEditTest));
就能得到,到底哪里出错误了呀
 
又想对QQ干坏事,唉!!真没出息!
 
放在DLL中就不行,但是放在应用程序中为什么没有事呢
 
你测试下H 是否得到了handle,估计应该没得到吧。
 
得到了,我已经show出来了,对的,但是就是不行
 
To:zhaokaien你知道吗,老大
我调了很长时间了,告诉我好吗
 
虽说不太知道你具体要干吗吧,说的具体点,我帮你想想
 
取QQ的聊天记录
当qq聊天记录关掉的时候取
 
觉得不应该有问题吧...应该是你那个地方犯小毛病了吧...关注中
 
你这函数是dll中还是exe中啊?
 
dll中,所有的都在dll中
 
To:lake_cx
放在exe和Dll中有区别吗?
 
楼主可以结贴了:
问题在这:
FrmHandle:=FindWindowEx(GetForegroundWindow,0,'#32770',nil);
if wParam=FrmHandle then
FrmHandle得到的是主窗口中的小对话框的handle,
而wParam是主窗口的句柄。根本都到不了下面的代码。
因为windows只会给窗体发送HCBT_DESTROYWND。而非所有的东东。
 
To:wonhunter
我把源代码全部贴出来,帮我看看
Function MsgHookProc(nCode:integer;WPARAM:wParam;LPARAM:lParam):LRESULT;Stdcall;
var
RichEditTest : array[0..100000] of char;
szText : array[0..256] of char;
S : string;
H : integer;
vk:byte;
ret : integer;
begin
if nCode=HCBT_DESTROYWND then
begin
FrmHandle:=FindWindowEx(GetForegroundWindow,0,'#32770',nil);
if wParam=FrmHandle then
begin
H := GetForegroundWindow;
GetWindowText(H, @szText, 255);
S := String(sztext);
if (pos('与',S) > 0) and (pos('聊天中',S) > 0) then
begin
H:=GetDlgItem(H,0);
H := GetDlgItem(H,$380);//聊天窗口的句柄
Messagebox(0,pchar(inttostr(H)),'',MB_OK);
Ret := SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1;
messagebox(0,pchar(inttostr(Ret)),'',MB_OK);
SendMessage(h,WM_GETTEXT,100000,Integer(@RichEditTest));

Messagebox(0,pchar(string(RichEditTest)),'',MB_OK);//这里为什么什么也没有
end;
Result:=0;
end
else Result:=CallNextHookEx(HookHandle,nCode,WParam,LParam);
end
else Result:=CallNextHookEx(HookHandle,nCode,WParam,LParam);
end;
 
Messagebox(0,pchar(inttostr(H)),'',MB_OK); // 这里都有值么?
Ret := SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1;
messagebox(0,pchar(inttostr(Ret)),'',MB_OK); // 这show出来的结果对么?
SendMessage(h,WM_GETTEXT,100000,Integer(@RichEditTest));
 
我做了一个句柄查看器,
Messagebox(0,pchar(inttostr(H)),'',MB_OK); // 这里都有值,与句柄查看器的一样
Ret := SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1;
messagebox(0,pchar(inttostr(Ret)),'',MB_OK); // 这show出来的结果是1,很明显不对
 
难道说QQ挂钩子了? 公司上不了QQ, 我这也不能测试...
不过既然句柄都一样的话,应该没有问题啊。
我试了试其他的dialog都可以啊。
有点爱莫能助了...
 
你可以上在家里上QQ试试呀
 
...住在公司...
 
晚上下班了呀,不就没有人了吗
 

Similar threads

后退
顶部