帮我看看这段代码怎么不对啊?高手来看啊!(10分)

  • 主题发起人 ysp_1984
  • 开始时间
Y

ysp_1984

Unregistered / Unconfirmed
GUEST, unregistred user!
帮我看看这段代码怎么不对啊?

Function Tform1.EnumWindowsProc(hwnd:HWND;IParam:LPARAM):boolean;
Var
MyString : array[0..255] of char;
begin
if IsWindowVisible(hwnd) then
begin
if (hwnd<>form1.Handle) and (hwnd<>Application.Handle) then
GetWindowText(hwnd,@MyString,255);
if MyString<>'' then
form1.memo1.lines.Add(MyString);
Result := True;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,0);
end;
 
你要实现什么功能?
出现什么错误?说清楚些好么?
 
试试改成下面这样,注意看,仔细看,不然发现不了:

Function EnumWindowsProc(hwnd:HWND;IParam:LPARAM):boolean;stdcall;
Var
MyString : array[0..255] of char;
begin
if IsWindowVisible(hwnd) then
begin
if (hwnd<>form1.Handle) and (hwnd<>Application.Handle) then
GetWindowText(hwnd,@MyString,255);
if MyString<>'' then
form1.memo1.lines.Add(MyString);
Result := True;
end;
end;

由于工作原因,很久没到DFW上来了,在此,先向各位同仁们表示歉意,也欢迎大家到我的小屋里坐坐,交流交流心得,相互学习,共同进步!
http://122259695.qzone.qq.com
 
//replace Boolean->BOOL
//add stdcall;
//move Result := True;

function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
MyString : array[0..255] of Char;
begin
Result := True;
if IsWindowVisible(hwnd) then
begin
if (hwnd <> TForm(lParam).Handle) and (hwnd <> Application.Handle) then
begin
GetWindowText(hwnd, MyString, SizeOf(MyString));
if MyString <> '' then TForm1(lParam).Memo1.lines.Add(MyString);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc, Integer(Self));
end;
 
还是不行啊 .错误如下:
[Error] Unit1.pas(49): Variable required
[Error] Unit1.pas(20): Unsatisfied forward or external declaration: 'TForm1.EnumWindowsProc'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
还真没有人会啊
 
第一个hwnd代表什么??
先先要对 hwnd付一个明确的窗口句柄
 
谁来救救我啊
 
知道你要做一个列举所有窗体的软件。
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
你的这个是调用api函数吗?
var
MyString : array[0..255] of Char;
begin
Result := True;
if IsWindowVisible(hwnd) then
begin
if (hwnd <> TForm(lParam).Handle) and (hwnd <> Application.Handle) then
begin
GetWindowText(hwnd, MyString, SizeOf(MyString));
if MyString <> '' then TForm1(lParam).Memo1.lines.Add(MyString);
end;
end;
end;
 
类函数不能直接做为回调函数。
楼上的例子可以。
 
接受答案了.
 
顶部