获取指定窗口控件句柄

Tody Guo CSDN会员 Tody Guo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
希望能得到高手的指点:
我想得到form1里面其中一个按钮的文本,下面是我的代码,但是总是执行不成功。希望高手能指点小弟一下。谢谢!
代码下面的那个图片就是我测试的环境。


unit Unit1;

interface

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

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

var
Form1: TForm1;
function EnumChildWndProc(AhWnd: HWND; AlParam: lParam):Boolean;stdcall;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Hwnd: THandle;
CHwnd: THandle;
Buf: array [0..20] of char;
i: LongInt;
begin
Hwnd := FindWindow(nil,Pchar('Project1'));
Edit1.Text:=IntToStr(Hwnd);
Memo1.Lines.Clear;
Memo1.Lines.Add('List of Buttons:');

if Handle <> 0 then
begin
CHwnd:=FindWindowEx(Hwnd,0,nil,nil); // Cannot Find anything, Why???
GetWindowText(CHwnd,buf,199);
Memo1.Lines.Add(IntToStr(CHwnd)+'->'+Buf);

EnumChildWindows(Self.Handle,@EnumChildWndProc,0); // Find self form ok!!!
if EnumChildWindows(Hwnd,@EnumChildWndProc,0) = True then // Return False, Why???? ShowMessage('Load items ok')
else
ShowMessage('Unload...');
{ Sleep(1000);
for i:=100000 to 999999 do // To Find Control ID, but no use, why???
begin
CHwnd := GetDlgItem(Handle,i);
GetWindowText(CHwnd,buf,20);
Memo1.Lines.Add(IntToStr(CHwnd)+':'+Buf+IntToStr(i));
if buf<>'' then
ShowMessage('Found!');
Sleep(10);
end;
}
end
else
MessageBox(self.Handle,'Window not found!','Tips',0);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

function EnumChildWndProc(AhWnd: HWND; 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(String(WndClassName));
Lines.Add(String(WndCaption));
Lines.Add('-------------------');
end;
Result:= True;
end;
end.


...全文

相关推荐

获取窗口与窗口中指定控件的各层级类名属性安装包.rar_句柄 控制_层级_属性_控件_类名

本软件是编写实现对外部程序进行控制,达到操作自动化的程序的很好辅助工具。当我们要编写对外部程序进行控制,实现操作自动化的软件时,就需要获得外部程序窗口与窗口中指定控件的各层级类名属性,本软件可以实现此目的。将鼠标放置在外部程序窗口中指定控件上,时间超过3秒钟,本软件就会显示出该控件的句柄、标题、类名,以及该控件的父窗口标题、父窗口类名,并且能将上述信息以及获取到的外部程序窗口中指定控件与其顶层窗口的各层级关系和相应的各层级类名与其他窗口属性写入到一个名称为wtcn.txt的文本中,

朱moyimi

VS2015中获取Windows窗口控件信息(2-1)

在VS2015中,可以通过API函数获取Windows窗口中控件的信息,包括控件句柄、控件显示的文字以及控件类型等。其流程为,首先获取Windows指定窗口的句柄,之后通过回调函数遍历该窗口中的控件句柄,最后通过控件句柄获取控件文字及类型。 1 获取窗口句柄 可以通过FindWindow()函数获取指定窗口的句柄。该函数的格式为 HWND FindWindowA( LPCSTR lpCl...

棉猴

windows通过进程名获取控件句柄

通过windows的进程名称获取主窗口句柄,通过主窗口句柄获取子控件句柄

dailinye33

VB获取窗口句柄

VB获取窗口句柄最容易看明白的代码。先看明白取窗口句柄后再学习取控件句柄。

zsjjh1

vb枚举指定窗口下控件类名及句柄

vb枚举所有桌面窗口、枚举指定窗口的控件类名及句柄

Seneal
评论 3
收藏 已收藏
分享
返回顶部