注册 登录
编程论坛 Delphi论坛

[求助]消息截获机制,能查找其它应用程序窗口的所有控件内容

hanjinliu 发布于 2007-08-04 12:54, 2130 次点击
公司让我用delphi编一个函数,功能:能够查找其它应用程序窗口中的所有控件的内容并显示出来。我是新手,以前没接触过delphi,我认为应该先获得那个窗口的句柄然后再实现查询,可是怎么也弄不出来,查了很多资料不能解决,望高手赐教,最好是给代码,谢谢!

[此贴子已经被作者于2007-8-4 13:42:34编辑过]


4 回复
#2
xu20002007-08-04 16:56
用FindWindow这个函数.
#3
hanjinliu2007-08-04 19:57
这个函数只能获得窗口句柄,但是怎样查看遍历窗口中所有控件的内容呢
#4
anthony6342007-08-06 10:25
EnumChildWindows
#5
anthony6342007-08-06 10:35

给你段小例子
unit Unit1;

interface

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

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

var
Form1: TForm1;
function EnumChildControlsWndProc(AhWnd:LongInt;
AlParam:lParam):boolean;stdcall;

implementation


{$R *.dfm}
function EnumChildControlsWndProc(AhWnd:LongInt;
AlParam:lParam):boolean;stdcall;
var
WndClassName: array[0..254] of Char;
WndCaption: array[0..254] of Char;
begin
GetClassName(AhWnd,wndClassName,254);
GetWindowText(aHwnd,WndCaption,254);
with form1.memo1 do
begin
lines.add('begin***********************');
lines.add( 'ClassName: ' + string(wndClassName));
lines.add( 'Text/Caption: ' + string(wndCaption));
lines.add('***********************end' + #13#10);
end;
result:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hWnd:LongInt;
begin
memo1.Lines.Clear;
Memo1.Lines.Add(Edit1.Text+' 子控件列表:');
hWnd:=FindWindow(nil,pchar(Edit1.Text));
if hWnd<>0 then
begin
EnumChildWindows(hWnd,@EnumChildControlsWndProc,0);
end
else
begin
ShowMessage('指定窗口不存在,请重新输入.');
end;
end;

end.

[此贴子已经被作者于2007-8-6 10:36:24编辑过]

1