【百分求助】如何获得一个exe程序界面上的各个控件的ID

niniu 2006-02-10 11:14:55
我想调用一个exe程序,但是这个程序没有提供控制台调用接口,因此我想通过发送消息模拟鼠标点击的方式来实现,那么,我如何获取这个程序的界面上的各个控件的ID(按钮、列表框、编辑框等)
或者大家有没有更好的方法?
...全文
299 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AKFish 2006-02-19
  • 打赏
  • 举报
回复
楼主如果是要枚举所有的控件~
就要用到华丽的回调函数了~
给个例子~
这个例子把所有的控件的类名和Caption输出~

function EnumChildWndProc(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.ListBox1 do
begin
Items.Add('Class Name:' + string(wndClassName));
Items.Add('Caption:' + string(wndCaption));
Items.Add('-------');
end;
result:=true;
end;

调用时用~
EnumChildWindows(hWnd, @EnumChildWndProc, 0);

其中hWnd为主窗口的句柄~
EnumChildWndProc的返回值一定要是boolean~
当EnumChildWndProc返回False或扫描到最后一个子窗口时~
回调函数终止~
woshihaoge 2006-02-15
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
frmHandle:THandle;
EditHandle:THandle;
BtnHandle:THandle;
begin
frmHandle:=findwindow(nil,'aaaa'); //aaaa为exe窗口标题名
EditHandle:=findwindowEx('frmHandle',0,'Edit',nil); //Edit为类名
BtnHandle:=findwindowEx('frmHandle',0,'button',‘sss'); //Button为类名 ,sss为按钮上的Caption

end;
jilu_sun 2006-02-15
  • 打赏
  • 举报
回复
收藏
biao_227 2006-02-13
  • 打赏
  • 举报
回复
GetDlgCtrlID得到的实际上是句柄
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=IntToStr(Button1.Handle);
Edit2.Text:=IntToStr(GetDlgCtrlID(Button1.Handle));
end;
clasj 2006-02-12
  • 打赏
  • 举报
回复
GetWindowLong(hWnd, GWL_ID)
newfang 2006-02-10
  • 打赏
  • 举报
回复
ID是什么??HANDLE吗??
用FINDWINDOW、GETWINDOW 啊!
fjx99 2006-02-10
  • 打赏
  • 举报
回复
以前很多帖子讨论这个问题的,如:
http://community.csdn.net/Expert/topic/4403/4403154.xml?temp=.6100428

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧