理解不了的函数,有分送! ( 积分: 50 )

  • 主题发起人 主题发起人 lovenuo
  • 开始时间 开始时间
L

lovenuo

Unregistered / Unconfirmed
GUEST, unregistred user!
理解不了,有朋友能给解释,一下吗,最好详细一点!

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;

function GetQQWnd: HWND;
var
hCurrentWindow: HWnd;
WndText:String;
begin
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); //顶级窗口
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow); //找到
if (Pos(Chr(13),WndText)>0) or (Pos(Chr(10),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;

function GetQQWnd: HWND;
var
hCurrentWindow: HWnd;
WndText:String;
begin
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); //顶级窗口
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow); //找到
if (Pos(Chr(13),WndText)>0) or (Pos(Chr(10),WndText)>0) then //查找目标
begin
Result:=hCurrentWindow;
Exit;
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
Result:=0;
end;
 
根据hWnd句柄得到控件的标题文本
 
这位,朋友在看看!
 
查找的为什么是
(Pos(Chr(13),WndText)>0) or (Pos(Chr(10),WndText)>0)
 
是不是可以这样理解:
如果窗口标题内有回车或者换行字符,则这个窗口是QQ的主窗口。
 
为什么会是QQ的,而不是其它的呢!
 
//hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); //顶级窗口
//while hCurrentWindow <> 0 do
// begin ...
// hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
// end;
这显然是一个枚举窗口的循环.至于为什么需要找回车,这个你可以用SPY++/找到那个窗口句柄,然后使用API得到他的标题,看看到底是什么.在标题栏加上回车,既不会影响显示,又给想做怪的人设置了一个小陷阱,虽然这个陷阱很简单.
 
多人接受答案了。
 

Similar threads

后退
顶部