题
有一些赢得OS API调或这样会让一个获得文本从屏幕上
不是通过获得快照,然后做OCR,但通过API
这个想法是让的文本是下鼠标用户点和点击次数。
这是如何的工具,如巴比伦(http://www.babylon.com)和1击的答复(http://www.answers.com/main/download_answers_win.jsp)和许多其他工作。
可以有人点我要正确的方向,获得这种功能?
解决方案
有没有直接的方法来获得的文本。应用程序可以呈现无数个不同的方式文本(Windows API的是其中之一),它的渲染后 - 它只是一堆像素
但你可以尝试的方法是找到窗口直属鼠标,并试图从他们那里得到的文本。这会工作在最标准的Windows控件(标签,文本框等)的罚款不会对互联网浏览器的工作,虽然。
我想你能做的最好是使应用程序,使得它支持以上述方式为许多不同的(公用的)的控制成为可能。
其他提示
您可以得到与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;
的问候,结果 利芬
窗户已经用于辅助工具,如屏幕阅读器的盲目。(较新的版本也是用于其他目的,如UI自动化和测试。) 它的工作与许多应用程序,即使大多数浏览器,这使他们自己的内容没有使用标准的控制。它不会与所有应用,但它可以使用的文字下鼠标在大多数情况下。
当前API被称为 Windows自动化API.描述如何做到这一点在一般范围的一个堆栈溢出回答,因此我只是提供了一个链接到文件。
老API,是广泛提供当这个问题被第一发布是所谓的 Microsoft活动的无障碍API.作为与现代Api,范围在这里太宽泛,可以详细说明。
注意,文件为这两个Api写既为开发建筑辅助工具(如屏幕阅读器)以及开发人员用于编写的应用程序,希望能与那些无障碍的工具。
基本的想法是,一个辅助工具得到COM接口提供的目标应用程序的窗口(s),并且它可以使用这些接口,以图控制和他们的文本以及它们如何是相关的两个逻辑上和空间。应用程序的组成的标准Windows控制大都是自动的支持。应用与自定义用户界面实现必须做的工作,提供这些接口。幸运的是,重要的,喜欢的主流浏览器,必须完成的工作,以支持这些接口。
我认为其称为剪贴板。我要去打赌这些计划注入单击,双击和键盘事件,然后那里复制的项目进行检查。另外,他们刚开了Windows文本控件的Jiggy,并抢得内容的方式。我怀疑,由于安全问题,这些工具在Vista上运行同样的问题。