转问题:看看我为什么抓不到QQ的消息内容?
我用下面代码,能抓到QQ窗体上的许多内容,可惜最需要的消息文本抓不到,哪位大虾给看看:
form1上放两个按钮和一个Tmemo控即可测试下面代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls,tlhelp32;
type
TForm1 = class(TForm)
Memo1: TMemo;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure GetQQTXT;
private
{ Private declarations }
public
{ Public declarations }
end;
var
MySendMSg:string;
Form1: TForm1;
function FindQQSon(ahwnd:hwnd;w:integer):boolean;stdcall;
function GetWndText(hWnd: HWND): String;
procedure GetQQ(mynd:hwnd);
implementation
{$R *.dfm}
procedure GetQQ(mynd:hwnd);
var
ihand:hwnd;
begin
try
if mynd<>0 then
begin
ihand:=GetDlgItem(mynd,0);
EnumChildWindows(ihand,@FindQQSon,0);
end;
except
end;
end;
function FindQQSon(ahwnd:hwnd;w:integer):boolean;stdcall;
var
buffer: array[0..255] of Char;
NeedClassName:string;
NeedString:string;
begin
Result:=true;
GetClassName(ahwnd,buffer,256);
NeedClassname:=StrPas(Buffer);
NeedString:=trim(GetWndText(ahwnd));
// if pos(Uppercase('EDIT'),Uppercase(NeedClassname))>0 then
// begin
// if NeedString<>'' then
// begin
MySendMSg:=MySendMSg+#13+#10+NeedClassname+'-->:'+NeedString;
// end;
// end;
EnumChildWindows(ahwnd,@FindQQSon,0);
end;
procedure Tform1.GetQQTxt;
var
hCurrentWindow: HWnd;
WndText:String;
begin
MySendMSg:='';
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow);
if (Pos('聊天中',WndText)>0) or (Pos('发送消息',WndText)>0) then
begin
MySendMSg:=MySendMSg+#13+#10+WndText+':';
GetQQ(hCurrentWindow);
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
Memo1.text:=MysendMsg;
end;
function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText
![Stick Out Tongue :P :P](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f61b.png)
Char;
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;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
GetQQTXT;
end;
end.