|
悬赏500金钱已解决
本帖最后由 tryhi 于 2011-3-20 00:16 编辑
发悬赏贴只在于表示诚信请教,高手都是不在乎金币的,这我知道。
我想用AU3实现这样一个功能,在屏幕选择一定区域,然后获取这个区域的文字(图片上的文字不在考虑范围内),就像Aqua Deskperience一样
Aqua Deskperience软件提供了一个可以提取文字的DLL,并有详细说明,我做了个不完全的翻译(英语太烂了),请问下AU3怎样调用呢。
1. 描述
TcaptureX库允许文本提取的
各种应用。它包含了一个COM对象来调用
TextCaptureX,暴露的一些方法,让文本
提取。
1.1. 创建一个TextCaptureX对象
首先,TcaptureX库必须注册
该系统。使用下列命令进行注册
:
regsvr32 <路径>\TCaptureX.dll
TCaptureX注册过程是自动完成安装.
下面是一些例子关于如何创建一TextCaptureX对象在你的应用程序.
1.1.1. Visual C++:
In order to use the COM object in your C++
application, add the following import statement to your C++
source file, like this:
#import "<path>\TCaptureX.dll"
Optionally, you may add also:
using namespace TCaptureXLib;
in order to reference
the namespace.
the objects without specifying
Then create the object in one of the following two
ways:
ITextCaptureXPtr obj(__uuidof(TextCaptureX));
Or
ITextCaptureXPtr obj = NULL;
HRESULT hr = obj.CreateInstance(__uuidof(TextCaptureX));
In order to destroy the object, call:
obj.Release();
备注: 创建对象,CoInitialize之前必须首先调用API函数.
1.1.2.
C#
-
add TCaptureX library to the list of the project
references
Optionally, you may add at the beginning of the file:
using TCaptureXLib;
in order to reference
the namespace.
The actual creation is:
the objects without specifying
TextCaptureXClass obj = new TextCaptureXClass();
1.1.3.
Visual Basic
-
add TCaptureX library to the list of the project
references
The actual creation is:
Dim obj As New TextCaptureX
1.2.
使用一个TextCaptureX对象
TextCaptureX object exposes the following methods:
-
-
-
-
-
GetActiveWindowHwnd
CaptureInteractive
CaptureActiveWindow
GetTextFromPoint
GetTextFromRect
1.2.1.
GetActiveWindowHwnd method
HRESULT GetActiveWindowHwnd([out,retval] LONG* hwnd);
它的作用是:返回当前窗口的句柄。如果当前窗口是一个MDI容器,它返回的柄活跃的MDI的孩子.
例子:
Visual C++:
LONG hWnd = obj->GetActiveWindowHwnd();
C#:
long hWnd = obj.GetActiveWindowHwnd();
Visual Basic:
Dim hWnd As Long
hWnd = obj.GetActiveWindowHwnd()
1.2.2.
CaptureInteractive method
HRESULT CaptureInteractive([out] LONG* hwnd, [out] LONG* left,
[out] LONG* top, [out] LONG* width, [out] LONG* height,
[out,retval] LONG* selection);
这个方法允许被自动选择捕获窗口和坐标。当调用这个方法,用户可以选择一个矩形用鼠标在屏幕上,不管遇到什么样的窗口。在第一个路口左拐点击指定的地方开始,第二次矩形左键点击指定的地方选择结束。在任何时候,按ESC键,中止的选择。
Parameters:
LONG* hwnd : 将包含的窗口句柄
LONG* left: X坐标的选择矩形
LONG* top: Y坐标选定矩形
LONG* width: 所选择的矩形的宽度
LONG* height: 所选择的矩形的宽度
LONG* selection: 自定义值,指定捕捉结果:
-
-
-
0 , 如果选择是确定
1 , 如果用户取消了捕捉
2 , 如果发生错误
Examples:
Visual C++:
long hWnd = 0;
long nLeft = 0;
long nTop = 0;
long nWidth = 0;
long nHeight = 0;
LONG result = obj->CaptureInteractive(&hWndTarget, &nLeft,
&nTop, &nWidth, &nHeight);
if(0 == result) //selection ok
{
}
//do something
C#:
long hWnd = 0;
long nLeft = 0;
long nTop = 0;
long nWidth = 0;
long nHeight = 0;
long result = obj.CaptureInteractive(out hWndTarget, out
nLeft, out nTop, out nWidth, out nHeight);
if(0 == result) //selection ok
{
}
//do something
Visual Basic:
Dim result As Long
Dim hWnd As Long
Dim left As Long
Dim top As Long
Dim width As Long
Dim height As Long
result = obj.CaptureInteractive(hWnd, left, top, width,
height)
If(0 == result) Then 'selection ok
{
}
End If
'do something
1.2.3.
CaptureActiveWindow method
HRESULT CaptureActiveWindow([out,retval] BSTR* result);
这种方法捕获从当前活动窗口中的文本,
是由GetActiveWindowHwnd方法返回的窗口。该
返回值是从当前窗口中的整个文本。
注:如果这种方法被称为应用程序是负责任的
不包含该系统的活动窗口。
参数:
BSTR* result : 从活动窗口中的文字
例子:
Visual C++:
_bstr_t result = obj->CaptureActiveWindow();
C#:
string result = obj.CaptureActiveWindow();
Visual Basic:
Dim result As String
result = obj.CaptureActiveWindow()
1.2.4.
GetTextFromPoint method
HRESULT GetTextFromPoint([in] LONG hwnd, [in] LONG x, [in] LONG y,
[out,retval] BSTR* result);
该方法通过在屏幕捕获点(x,y)的指定的字
坐标,由指定的窗口的HWND。
注:人们有可能利用CaptureIntercative方法来获取这些参数,
这是窗口句柄和坐标。
参数:
LONG hwnd : 处理窗口捕捉
LONG X : X坐标点
LONG Y : Y坐标点
BSTR* result : 这个字(如果有的话)在指定的点位于
例子:
Visual C++:
LONG hwnd = 0;
LONG X = 0;
LONG Y = 0;
//set the values
.......
bstr_t bstrResult = obj->GetTextFromPoint(hwnd, X, Y);
C#:
long hwnd = 0;
long X = 0;
long Y = 0;
//set the values
.......
string result = obj.GetTextFromPoint(hwnd, X, Y);
Visual Basic:
Dim result As String
Dim hwnd As Long
Dim X As Long
Dim Y As Long
'set the values
.......
result = obj.GetTextFromPoint(hwnd, X, Y)
1.2.5.
GetTextFromRect method
HRESULT GetTextFromRect([in] LONG hwnd, [in] LONG left, [in] LONG top,
[in] LONG width, [in] LONG height, [out,retval] BSTR* result);
这种方法捕获从指定的矩形文本(左,上,
宽度,高度屏幕)坐标,由指定的窗口的句柄。
注:人们有可能利用CaptureIntercative方法来获取这些参数,
这是窗口处理和协调.
参数:
LONG hwnd : 处理窗口捕捉
LONG left : X坐标上矩形的左上点
LONG top : Y坐标上矩形的左上点
LONG width : 矩形的宽度
LONG height : 矩形的高度
BSTR* result : 位于该地区的文本指定的矩形
例子:
Visual C++:
LONG hwnd = 0;
LONG left = 0;
LONG top = 0;
LONG width = 0;
LONG height = 0;
//set the values
.......
bstr_t bstrResult = obj->GetTextFromRect(hwnd, left, top,
width, height);
C#:
long hwnd = 0;
long left = 0;
long top = 0;
long width = 0;
long height = 0;
//set the values
.......
string result = obj.GetTextFromRect(hwnd, left, top, width,
height);
Visual Basic:
Dim result As String
Dim hwnd As Long
Dim left As Long
Dim top As Long
Dim width As Long
Dim height As Long
'set the values
.......
result
=
obj.GetTextFromRect(hwnd,
left,
top,
width,
height)
这个问题不想再去浪费时间了,能力不够,也不是非要弄会不可,感谢各位的关注,非常感谢 |
附件: 您需要 登录 才可以下载或查看,没有账号?加入
最佳答案
查看完整内容
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=17726&pid=198403&fromuid=7634069
|