首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-08-10 
请教关于一段程序的问题诚心请大虾给个注释,在网上看到的部分程序,看不懂。functionEnumChildWindowsProc(h

请教关于一段程序的问题
诚心请大虾给个注释,在网上看到的部分程序,看不懂。
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.

热点排行