找回密码
 加入
搜索
楼主: leoking71

[AU3基础] 屏幕取词的一些研究与探讨(已解决)

 火.. [复制链接]
发表于 2012-7-5 16:48:03 | 显示全部楼层
本帖最后由 user3000 于 2012-7-5 17:20 编辑

回复 3# leoking71
    回复 5# afan
直到现在才发现我6楼的发言前言不搭后语...

刚才胡乱测试时, 发现调用 CaptureInteractive 方法时, 鼠标变成十字, 似乎等待下一步的手动选定取词范围? 应该就此返回矩形坐标了.

....以此为突破口, 测试再三再六的, 终于发现, 是AU3无具体变量类型惹的麻烦.
..还好, AU3里还有个迂回的选择: DllStructCreate ...
(以前看过个帖子, 有类似问题, 好像是P版指出变量问题, 忘了是关于什么内容了.. )

不说废话了, 看代码吧:
Local $str = "long var1;long var2;long var3;long var4;long var5"
$a = DllStructCreate($str)
DllStructSetData($a, "var1", 0)
DllStructSetData($a, "var2", 0)
DllStructSetData($a, "var3", 0)
DllStructSetData($a, "var4", 0)
DllStructSetData($a, "var5", 0)

Dim $hWnd = DllStructGetPtr($a, 1)
Dim $left = DllStructGetPtr($a, 2), $top = DllStructGetPtr($a, 3)
Dim $width = DllStructGetPtr($a, 4), $height = DllStructGetPtr($a, 5)
$oTcapt = ObjCreate("TCaptureX.TextCaptureX")
$capt = $oTcapt.CaptureInteractive($hWnd, $left, $top, $width, $height)
;MsgBox(0,"$capt=",$capt)
;MsgBox(0,"变量检查","$hWnd="&$hWnd&@CRLF&"$left="&$left&@CRLF&"$top="&$top&@CRLF&"$width="&$width&@CRLF&"$height="&$height)
If $capt = 0 Then
        MsgBox(0, "取词结果", $oTcapt.GetTextFromRect($hWnd, $left, $top, $width, $height))
Else
        MsgBox(16, 'Err', '取词失败了')
EndIf
发表于 2012-7-5 16:49:44 | 显示全部楼层
今天又做了个第一次, 尝试作了个 AU3 式的数据结构....哈哈!
发表于 2012-7-5 18:57:09 | 显示全部楼层
膜拜,我何时才能到这个水准
发表于 2012-7-6 00:20:21 | 显示全部楼层
回复  leoking71
    回复  afan
直到现在才发现我6楼的发言前言不搭后语...

刚才胡乱测试时, 发现调 ...
user3000 发表于 2012-7-5 16:48



    奇怪,我这测试出错
$capt = $oTcapt.CaptureInteractive($hWnd, $left, $top, $width, $height)^ERROR
请求动作失败
直接填坐标值无此错误,当然也没用~
发表于 2012-7-6 00:39:56 | 显示全部楼层
回复 19# afan

很可能是 Aqua 那个插件版本的问题. 刚开始我用单一DLL文件时, 无法注册, 后面是从太平洋网上下了个, 应该是最新版吧.
发表于 2012-7-6 01:37:51 | 显示全部楼层
本帖最后由 user3000 于 2012-7-6 04:42 编辑

回复 19# afan
这是从安装好的文件中提取的, 经测试, 无法单独注册组件.看来还是要下载安装版进行安装.


再上传个此插件的帮助文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-6 01:57:15 | 显示全部楼层
本帖最后由 netegg 于 2012-7-6 02:19 编辑

回复 16# user3000

如果是对象,定义结构干什么?你那个后面的代码和单独定义5个变量有区别吗?
你可以测试下
[au3]Local $str = "long var1;long var2;long var3;long var4;long var5"
$a = DllStructCreate($str)
DllStructSetData($a, "var1", 0)
DllStructSetData($a, "var2", 0)
DllStructSetData($a, "var3", 0)
DllStructSetData($a, "var4", 0)
DllStructSetData($a, "var5", 0)

Dim $hWnd = DllStructGetPtr($a, 1)
Dim $left = DllStructGetPtr($a, 2), $top = DllStructGetPtr($a, 3)
Dim $width = DllStructGetPtr($a, 4), $height = DllStructGetPtr($a, 5)
msgbox(0,0,$hwnd &@cr&$left&@cr&$top&@cr&$width&@cr&$height)[/au3]
发表于 2012-7-6 02:12:45 | 显示全部楼层
本帖最后由 netegg 于 2012-7-6 02:39 编辑

回复 1# leoking71
$hWnd=0,$left=0,$top=0,$width=0,$height=0,这几个为什么要定义为0,即使定义为0,后面的xyhw不用赋值就行了?
http://www.screenscraperstudio.com/wiki/TextCaptureX_SDK
lz看看这里面的代码吧,c++,和basic的代码对应比较下,后面的那个0在c++里只是为了初始化变量,basic里根本没定义

官网居然有人讨论过这个玩意(6年前的帖子)
http://www.autoitscript.com/foru ... lcall-tcapturexdll/
发表于 2012-7-6 03:21:59 | 显示全部楼层
本帖最后由 user3000 于 2012-7-6 03:23 编辑

回复 22# netegg
老大, 我不熟悉'结构', 但通过这次成功测试的实验, 我才稍稍有点理解这方面的知识.
按我的理解讲一下吧, 不对的地方请继续指教.

定义结构是为了保证变量类型是 LONG .
后面又从结构中'截取'出单独变量, 其实这5个变量是'指针类型', 指向的是内存的地址, 非如此操作,后面调用"GetTextFromRect " 方法时, 无法传递这些变量的值(CaptureInteractive 方法确定它们的值). 我尝试用 DllStructGetData 对这些变量赋值, 脚本则取词操作失败.

我估计AU3变量的存储方式与C++, Basic 等不同, 对象向脚本传递数据时必须采用这种'迂回'的方式.

P侠 跟 theSnow ?  还是CeoGuang 版主? 我不能确定了, 他们在某个帖子里有过简短的讨论的. 我暂时翻不出该帖. 希望有空时能找出来.
发表于 2012-7-6 08:25:06 | 显示全部楼层
回复  afan
这是从安装好的文件中提取的, 经测试, 无法单独注册组件.看来还是要下载安装版进行安装.
...
user3000 发表于 2012-7-6 01:37



    这个和我的一样,而且,注册应该还需要两个Dll文件:RL.dll、TCCustom.dll
替换附件中的两个仍不行,报错,要安装的话就算了,没什么意义~ 真要搞这个的话自己写个区域框得了。
发表于 2012-7-6 08:42:40 | 显示全部楼层
本帖最后由 user3000 于 2012-7-6 08:56 编辑

回复 25# afan

是的, 如果手动指定区域取词, 搬'蚂蚁线'的代码来稍微改一下就行了.


上个动画图, 这是安装了9楼附件的测试结果, 弄不清它到底要注册几个文件了.
GIF动画, 没能截取到鼠标形状的改变, 其实取词前, 鼠标变成了'十字形状'.

[

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-6 10:05:56 | 显示全部楼层
本帖最后由 netegg 于 2012-7-6 10:06 编辑

回复 24# user3000
如果结构中定义了某个元素是long,那么该元素就不再具有ptr属性,换言之,元素可以认为是两部分构成,一部分是类型(定义时),一部分是值(指定时,根据类型赋值),要根据你的定义不同使用不同的方法获取值,如果是指针,dllstructgetdata出来的结果本身是指针的值,不是变量的值
发表于 2012-7-6 10:21:47 | 显示全部楼层
回复  user3000
如果结构中定义了某个元素是long,那么该元素就不再具有ptr属性,换言之,元素可以认为是 ...
netegg 发表于 2012-7-6 10:05



    3000 是 GetPtr ...
而且他也成功鸟
发表于 2012-7-6 10:26:03 | 显示全部楼层
回复 28# afan
看看6年前官网那个帖子的23和26楼
发表于 2012-7-6 10:30:36 | 显示全部楼层
回复  afan
看看6年前官网那个帖子的23和26楼
netegg 发表于 2012-7-6 10:26



    肿么了?
23# 那个并没有讨论 CaptureInteractive。26 # 没有注册Dll
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 15:52 , Processed in 0.073029 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表