Delphi: 如何访问另一个应用程序的控件?

3

我希望能够查看另一个应用程序显示的信息,然后“点击”不同的按钮以自动化处理过程。我以前从未做过这个,希望您能就从哪里开始和/或提供链接给予任何建议。

4个回答

8
你可以使用免费软件WinDowse获取任何窗口的必要技术信息。
该示例展示如何使用x,y坐标模拟点击按钮。
Procedure PressButtonXY(handleWnd : HWND;X,Y : Integer);   //X,Y are relative to the client area, you can use ScreenToClient to obtain this.
var
LParam    : Integer;
begin
LParam    := MakeLong(X, Y);
PostMessage(handleWnd, WM_LBUTTONDOWN, MK_LBUTTON, LParam);
PostMessage(handleWnd, WM_LBUTTONUP, MK_LBUTTON, LParam);
end;

8

使用一些SendMessage(),您可以模拟用户与任何程序的交互。这是所有“自动点击”或宏程序的核心。

WinSight(Borland\Delphi7\Bin\WS32.EXE)非常有用,可以获取要与SendMessage()一起使用的内容ID。您还需要使用FindWindow()


3
在Windows平台上自动化另一个应用程序的正确方法是通过使用UI Automation框架。它支持使用相同级别的功能性的.Net和COM API。免责声明:我多年没有接触Delphi了,所以我不知道哪个对您更容易使用。请注意,UI Automation仅适用于XP及以上版本;如果出于某种原因需要自动化Win2k或Win9x上的应用程序,则应查看Windows Active Accessibility API。

2

需要注意的一点是,在Vista(或windows 7)上跨应用程序边界发送消息并不总是有效的。如果一个应用程序在另一个安全上下文中启动,例如以管理员身份运行,那么来自另一个安全上下文的应用程序的发布消息将被阻止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接