读书人

请问关于一段程序的有关问题

发布时间: 2013-08-10 21:14:06 作者: rapoo

请教关于一段程序的问题
诚心请大虾给个注释,在网上看到的部分程序,看不懂。
function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean;
var
buffer: array[0..255] of char;
begin
Result := True; //这行是什么意思?
GetClassName(hwnd,buffer,256);//根据句柄获取类名
if StrPas(Buffer)='Edit' then //如果类名是Edit
begin
SendMessage(hwnd,WM_GETTEXT,256,lparam); //这行是什么意思?
Result:=False; //这行是什么意思?
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hwnd: Integer;
buffer: array[0..255] of char;
Begin
hwnd := FindWindow('CabinetWClass',nil);
if hwnd<> 0 then
begin
EnumChildWindows(hwnd,@EnumChildWindowsProc,Longint(@buffer[0]));
Caption := StrPas(buffer);
end;
end;


[解决办法]

引用:
Quote: 引用:

Form1.Memo1.Lines.Add(StrPas(buffer));//显示到Form1的Memo中
改为
Form1.Memo1.Lines.Add(PChar(lparam));


SendMessage(hwnd,WM_GETTEXT,256,lparam);这句编译出来总有问题,不好意思,我是超级菜鸟,太麻烦你了。
编译中总是提示:
1.[Error] Unit1.pas(40): '(' expected but ',' found,
2.[Error] Unit1.pas(40): Statement expected, but expression of type 'Integer' found



参考这一份,我测试了没问题。


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function GetWndText(ThWnd: hWnd): string;
var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret := SendMessage(ThWnd, WM_GETTEXTLENGTH, 0, 0) + 1;
GetMem(mText,Ret);
try
Buf := LongInt(mText);
SendMessage(ThWnd, WM_GETTEXT, Ret, Buf);
Result := StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;

function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean; stdcall;
var
buffer: array[0..255] of Char;
begin
Result := True;
GetClassName(hwnd,@buffer,256);
if Buffer='Edit' then
begin
Form1.Memo1.Lines.Add(IntTOHex(hwnd, 8) +': '+ GetWndText(hwnd));
//SendMessage(hwnd,WM_GETTEXT,256,lparam);
Result:=False;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);


var
hwnd: Integer;
buffer: array[0..255] of char;
Begin
hwnd := FindWindow('CabinetWClass',nil);
if hwnd <> 0 then
begin
Form1.Memo1.Lines.Add('Handle: ' + IntTOHex(hwnd, 8));
EnumChildWindows(hwnd,@EnumChildWindowsProc,0);
//Caption := StrPas(buffer);
end;
end;

end.

读书人网 >.NET

热点推荐