Delphi:如何访问其他应用程序的控件?

时间:2009-08-19 02:31:39

标签: delphi controls delphi-7

我想“查看”其他应用程序显示的信息,并“单击”不同的按钮以自动执行某个过程。以前从未这样做过,并希望了解有关从何处开始和/或链接的任何建议。

4 个答案:

答案 0 :(得分:7)

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

WinSight(Borland \ Delphi7 \ Bin \ WS32.EXE)可能非常有助于获取与SendMessage()一起使用的内容ID。您还必须使用FindWindow()

答案 1 :(得分:7)

您可以使用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;

答案 2 :(得分:3)

在Windows平台上自动化其他应用程序的正确方法是使用 UI Automation 框架。它支持具有相同功能级别的.NetCOM API。

免责声明:我多年没有接触过Delphi,所以我不知道哪一个更易于使用。

请注意,UI自动化仅适用于XP及更高版本;如果由于某种原因你需要在Win2k或Win9x上自动化应用程序,你应该看看Windows Active Accessibility API。

答案 3 :(得分:1)

需要注意的一点是,跨应用程序边界发布消息并不总是适用于Vista(或Windows 7)。如果应用程序在另一个安全上下文中启动,例如以admin身份运行,则将阻止来自另一个安全上下文中的另一个应用程序的发布消息。

相关问题