我想写一个QQ聊天记录器,就是把所有好友和自己的聊天内容记录下来!遇到问题!请大家帮帮忙!谢谢!(100分)

  • 主题发起人 主题发起人 tigerhacker
  • 开始时间 开始时间
T

tigerhacker

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个QQ聊天记录器,就是把所有好友和自己的聊天内容记录下来!遇到问题!请大家帮帮忙!谢谢!

问题是这样的!我的思路是:

首先抓取 QQ消息框的窗口句柄

代码如下!

function GetQQWnd():HWND;
var
hCurrentWindow: HWnd;
WndText:array[0..255]of char;
begin
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
GetWindowText(hCurrentWindow,WndText,50);
if (Pos('聊天中',WndText)>0) or (Pos('发送消息',WndText)>0) then
begin
Result:=hCurrentWindow;
Exit;
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
Result:=0;
end;

这里没有问题!当聊天窗口打开的时候可以抓取到窗口句柄!

接下来是要抓取聊天记录框和发送消息框的句柄,
然后提取当中的内容保存,

我的代码如下:
// 获得窗口文本
function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;
GetMem(mText,Ret);
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_GETTEXT,Ret,Buf);
Result:=StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;
函数 GetWndText(hWnd: HWND): String;
参数为文本框的句柄,返回内容为文本框的字符串,
可是这就遇到问题了!
我用的txtWnd:=GetWindow(GetDlgItem(qqWnd,0),GW_CHILD); // 得到文本框句柄

后来测试的结果是,返回的内容为空,可是我的QQ的输入框有内容,明显不对了!我也不知道为什么!请大家一起讨论一下!谢谢! 我觉得关键问题就在于如何抓取 聊天记录框和发送消息框的句柄,我的代码是不是有问题!谢谢大家!
 
嘿嘿,记录键盘输入好了:)
 
我也正写这个东西,回来和你交流
 
键盘记录对于获取QQ密码之内的东西到是可以的!但是这个软件用键盘记录我都不知道怎么用!没法用啊!如果这位兄弟有思路,拿出来交流下怎么样@!
 
hButton := findwindow('AfxWnd42',nil);

if hButton=0 then Exit;
showmessage('找到输入框');

我打印了一下过程,这步抓不到
 
我刚研究好了键盘记录,但是记录到的都是英文键盘输入,汉字的我抓不到...
加我Q:289284226
 
我抓了一下窗口
function GetCaption(hWnd: LongWord): string;
var
szWindowText: array[0..MAX_PATH] of Char;
szTextLength: Integer;
begin
szTextLength := SendMessage(hWnd, WM_GETTEXT, MAX_PATH, Integer(@szWindowText[0]));
szWindowText[szTextLength] := #0;
Result := szWindowText;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.text:=result;
end;
procedure TForm1.Timer1Timer(Sender: TObject);

var
window0,Window,hButton : THandle;


begin

result := '';

//先把 result置空
Window0:=FindWindow('#32770', nil);


if window0 = 0 then exit;

Window:=FindWindow('#32770', nil);


if window = 0 then exit;

hButton := findwindow('AfxWnd42',nil);


if hButton=0 then Exit;
showmessage('找到2');

end;

end.
过程到
hButton := findwindow('AfxWnd42',nil);
就EXIT了,用getdlgitem也不行,呵呵,晕了晕了
 
写个屏幕抓拍。每2秒拍一次。什么都看到。当然登录密码看不到[:D]
 
呵呵,思路到是可以啊!可是保存的文件会很大!这到是个问题
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
571
import
I
后退
顶部