2009-02-05 74 views

回答

1

没有直接的方法来获取文本。一个应用程序可以以几十种不同的方式呈现文本(Windows API就是其中之一),并在呈现之后 - 它只是一堆像素。

然而,您可以尝试的一种方法是直接在鼠标下方找到窗口并尝试从中获取文本。这在大多数标准Windows控件(标签,文本框等)上都可以正常工作,但在Internet浏览器上不起作用。

我认为您可以做的最好的事情就是让您的应用程序能够以上述方式支持尽可能多的不同(通用)控件。

-1

我认为它叫剪贴板。我打赌这些程序注入点击并双击&键盘事件,然后复制项目在那里进行检查。或者,他们正在用windows的文本控件开始jiggy,并以这种方式抓取内容。我怀疑由于安全问题,这些工具也有问题在Vista中运行。

1

您可以使用GetWindowText API获取每个窗口的文本。使用GetCursorPos API可以找到鼠标位置。

在Delphi中,你可以使用此功能(荣誉彼得以下)

Function ChildWindowUnderCursor: HWND; 
Var 
    hw, lasthw: HWND; 
    pt, clientpt: TPoint; 
Begin 
    Result := 0; 
    GetCursorPos(pt); 
    // find top-level window under cursor 
    hw := WindowFromPoint(pt); 
    If hw = 0 Then Exit; 

    // look for child windows in the window recursively 
    // until we find no new windows 
    Repeat 
    lasthw := hw; 
    clientpt := Pt; 
    Windows.ScreenToClient(lasthw, clientpt); 
    // Use ChildwindowfromPoint if app needs to run on NT 3.51! 
    hw := ChildwindowFromPointEx(lasthw, clientpt, CWP_SKIPINVISIBLE); 
    Until hw = lasthw; 
    Result := hw; 
End; 

问候,
利芬

0

Windows有用于辅助工具,如屏幕阅读器为盲人的API。 (新版本也用于其他用途,例如UI自动化和测试。)它可以与许多应用程序一起使用,即使大多数浏览器都可以在不使用标准Windows控件的情况下呈现自己的内容。它不适用于所有应用程序,但在大多数情况下可用于确定鼠标下的文本。

当前的API被称为Windows Automation API。一般描述如何做到这一点超出了Stack Overflow答案的范围,所以我只是提供了一个链接到文档。

此问题首次发布时广泛使用的旧API称为Microsoft Active Accessibility API。与现代的API一样,这里的范围太宽而无法在此详述。

请注意,这两个API的文档既针对构建辅助工具(如屏幕阅读器)的开发人员,也针对希望与这些辅助功能工具兼容的应用程序的开发人员编写。

其基本思想是可访问工具获取目标应用程序窗口提供的COM接口,并且可以使用这些接口来找出控件及其文本以及它们在逻辑和空间方面的关系。大多数自动支持由标准Windows控件组成的应用程序。自定义用户界面实现的应用程序必须尽力提供​​这些界面。幸运的是,重要的,如主流浏览器,已经完成了支持这些接口的工作。

相关问题