请教这个dll的使用:屏幕取文字的应用
本帖最后由 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
Thencreatetheobjectinoneofthefollowingtwo
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#
-
addTCaptureXlibrarytothelistoftheproject
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
-
addTCaptureXlibrarytothelistoftheproject
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( 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
HRESULTCaptureInteractive(LONG*hwnd,LONG*left,
LONG* top, LONG* width, LONG* height,
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;
LONGresult=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;
longresult=obj.CaptureInteractive(outhWndTarget,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( 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
HRESULTGetTextFromPoint(LONGhwnd,LONGx,LONGy,
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( LONG hwnd, LONG left, LONG top,
LONG width, LONG height, 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 $oTCaptureX=objcreate("TCaptureX.TextCaptureX")
;if isobj($oTCaptureX) then msgbox(0,"","OK")
$hdl=$oTCaptureX.GetActiveWindowHwnd
$str=$oTCaptureX.gettextfromrect($hdl,1,1,500,500)
msgbox(0,$hdl,$str)后面四个参数用不明白,老是取不到内容。$str=$oTCaptureX.CaptureInteractive($hdl,0,0,500,500)加上这句可以手动选择区域,也不知道要怎么用,权当开拓一下大家的思路吧。 本帖最后由 tryhi 于 2011-3-18 21:37 编辑
回复 2# kevinch
有个问题,就是我运行这句regsvr32 C:\TCaptureX.dll却出现这个提示
回复 4# pusofalse
感谢P版先,我研究下,这两天咋给忘了搜索“取词”这个关键词呢。。。。 回复kevinch
有个问题,就是我运行这句却出现这个提示
tryhi 发表于 2011-3-18 21:34 http://www.autoitx.com/images/common/back.gif
楼主提供的那个独立的tcapturex.dll有问题,不能正常使用,请使用程序中的那个tcapturex.dll,那个是好的,我是用那个注册后使用的。 本帖最后由 tryhi 于 2011-3-19 16:00 编辑
楼主提供的那个独立的tcapturex.dll有问题,不能正常使用,请使用程序中的那个tcapturex.dll,那个是好 ...
kevinch 发表于 2011-3-19 07:04 http://www.autoitx.com/images/common/back.gif
怎么我用程序里面那个注册仍然失败呢{:face (189):} 回复 4# pusofalse
P版这个确实令人佩服,只不过IE里的内容似乎没办法,只能取IE的工具栏那些,对于网页内容似乎无能为力,还是非常感谢 安装Aqua1.3就可以正常注册 回复 9# fyy6330
不是吧……那么麻烦的话真不想用 回复fyy6330
不是吧……那么麻烦的话真不想用
tryhi 发表于 2011-3-19 16:07 http://www.autoitx.com/images/common/back.gif
我就是用的你的程序压缩包中的那个点右键注册后使用的,没用安装程序。 虽然用AU3暂时还不知道怎么使用,但是楼主的资源对我很有用,先用C#做做看。谢谢楼主 好高深直接看不懂。。。。 本帖最后由 manlty 于 2011-3-25 19:40 编辑
早就有人做这个dll的au3程序调用了。不过这个速度有点慢。
说到快,还是p版以前写的那个内存取词的程序。好像还用到汇编。不过是用au3来做的。
希望P版能改一下,不仅仅是取一个词,最好是能取目标窗口内给定lef\top\width\height的矩形区域内的文字。 回复 14# manlty
不明白你的意思,这个不是P版的那个么?没有调用DLL啊
页:
[1]
2