标题:[求助]消息截获机制,能查找其它应用程序窗口的所有控件内容
只看楼主
hanjinliu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-4
 问题点数:0 回复次数:4 
[求助]消息截获机制,能查找其它应用程序窗口的所有控件内容
公司让我用delphi编一个函数,功能:能够查找其它应用程序窗口中的所有控件的内容并显示出来。我是新手,以前没接触过delphi,我认为应该先获得那个窗口的句柄然后再实现查询,可是怎么也弄不出来,查了很多资料不能解决,望高手赐教,最好是给代码,谢谢!

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


搜索更多相关主题的帖子: 应用程序 控件 机制 窗口 截获 
2007-08-04 12:54
xu2000
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:51
帖 子:3890
专家分:56
注 册:2006-4-8
得分:0 
用FindWindow这个函数.

我会拿出我全部的钱财,以保你衣食无忧。我会献出我所有的智慧,以助你一帆风顺。我会想到所有的笑语,以令你展眉开颜。我会挤出最长的时间,以使你终生幸福。        [本人原创的结婚宣言]
2007-08-04 16:56
hanjinliu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-4
得分:0 
这个函数只能获得窗口句柄,但是怎样查看遍历窗口中所有控件的内容呢
2007-08-04 19:57
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
EnumChildWindows
2007-08-06 10:25
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

给你段小例子
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编辑过]

2007-08-06 10:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-160298-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.403571 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved