找回密码
 加入
搜索
查看: 19087|回复: 28

[AU3基础] Au3 有整合脚本的工具或功能吗?

 火.. [复制链接]
发表于 2012-11-27 21:56:51 | 显示全部楼层 |阅读模式
比如将“test.au3”脚本中的 “#Include <xxx.au3>”、“#Include ...” 所有 Include 文件整合进“test.au3”主脚本,不需再额外“#Include ...”,此时的“test.au3”即为可独立运行的整合脚本。

貌似没找到这个工具或功能…
“代码迷惑”可以将脚本精简成一个独立的整合脚本,但由于它“精简”了,在很多情况下会造成功能缺失。除此之外没有一个不改变原样的参数来整合?

这个功能应该很实用,即可不担心AU3升级带来的UDF改变而造成需修改脚本的困扰,也可在直接编译后如有错误可直接定位到错误行。
是我凹凸了,还是确实木有该功能? 没有的话我就自己整了……
发表于 2012-11-27 22:07:30 | 显示全部楼层
回复 1# afan

沙发,应该没有吧,支持A大写一个造福大众~~~

评分

参与人数 1金钱 +20 收起 理由
afan + 20 SF+

查看全部评分

发表于 2012-11-27 23:26:50 | 显示全部楼层
回复 1# afan

最近坛子冷清了很多,估计是问题都比较简单,高手不屑出手吧~~~

像这类的工具的确有必要增强些,之前有位坛友写了个根据出错信息来自动将需要的include的UDF添加到当前脚本,也是相当实用的功能,其实还有个更好的,但要完美实现可能会有些困难,不过既然讨论到这些实用的功能,也提出来大家一起讨论~~

比如说:
调用API
_WinAPI_QueryPerformanceFrequency
查看帮助,需要include winapiex.au3
但如果直接包含的话,这个文件有2M多,就算压缩了也有300K,这样会使生成的脚本大这么多(无用代码44000多行),而查看一下里面的函数
Func _WinAPI_QueryPerformanceFrequency()

        Local $Ret = DllCall('kernel32.dll', 'int', 'QueryPerformanceFrequency', 'int64*', 0)

        If (@error) Or (Not $Ret[0]) Then
                Return SetError(1, 0, 0)
        EndIf
        Return $Ret[1]
EndFunc   ;==>_WinAPI_QueryPerformanceFrequency


如果可以根据当前脚本来查找哪里函数是没有定义的,就在include里查找,如果找到就将对应的函数部分复制到当前脚本来,这样可以大大地缩小体积,同时不使UDF的易用性~~
但困难应该会比较大,特别是里面可能会有一些常量定义,或者不是当前UDF里面定义的,就更麻烦`~
   

直接把它COPY到脚本效果也一样,但体积小了很多
发表于 2012-11-28 10:23:56 | 显示全部楼层
回复 1# afan

“代码迷惑”可以将脚本精简成一个独立的整合脚本,但由于它“精简”了,在很多情况下会造成功能缺失。


不知道什么情况下会造成功能缺失~没遇到过。

整合到一个脚本,的确有其好处,至少AutoIt出错报xxx行发生错误的时候很容易找到对应的位置。
但也有弊端啊,代码太多,主体不突出,可读性下降了。
 楼主| 发表于 2012-11-28 11:05:24 | 显示全部楼层
本帖最后由 afan 于 2012-11-28 11:12 编辑
回复  afan
不知道什么情况下会造成功能缺失~没遇到过。...
xiehuahere 发表于 2012-11-28 10:23



    如果使用代码迷惑的精简代码功能,在脚本中使用以下AutoIt3函数时,如果参数使用了变量或包含“&”连接,可能会造成迷惑的脚本功能缺失。
        AdlibEnable()
        AdlibRegister()
        AdlibDisable()
        AdlibUnRegister()
        Call()
        Eval()
        Execute()
        DllCallbackRegister()
        GUIRegisterMsg()
        GUISetOnEvent()
        GUICtrlSetOnEvent()
        HotKeySet()
        IsDeclared()
        TrayItemSetOnEvent()
        ObjEvent()
        ...
        以及不同Au3版本使用的 Start、Exit 调用函数如
        Opt('OnExitFunc', 'OnAutoItExit')
        OnAutoItStart()
        OnAutoItExit()
        OnAutoItExitRegister()
        OnAutoItExitUnregister()
        ...

...整合到一个脚本,的确有其好处,至少AutoIt出错报xxx行发生错误的时候很容易找到对应的位置。
但也有弊端啊,代码太多,主体不突出,可读性下降了。...
xiehuahere 发表于 2012-11-28 10:23



    其实我指的就是编译前整合一次,不用在意可读性,主要是给自己一个备份文件。也可根据自己的需要将整合后的脚本再分割为“主、含”两个脚本。
 楼主| 发表于 2012-11-28 11:16:01 | 显示全部楼层
回复  afan
...像这类的工具的确有必要增强些,之前有位坛友写了个根据出错信息来自动将需要的include的UDF添加到当前脚本,也是相当实用的功能,其实还有个更好的,但要完美实现可能会有些困难,不过既然讨论到这些实用的功能,也提出来大家一起讨论 ...
annybaby 发表于 2012-11-27 23:26



    几乎不用 SciTE,所以没关注相关话题~ 不过你说的功能不如使用代码迷惑的精简功能,再来修改,可能比自己添加这些更快解决。

评分

参与人数 1金钱 +20 收起 理由
annybaby + 20 学习了~

查看全部评分

发表于 2012-11-28 11:28:59 | 显示全部楼层
scite 工具菜单 -  alt +F6 精简autoit程序
 楼主| 发表于 2012-11-28 11:30:28 | 显示全部楼层
scite 工具菜单 -  alt +F6 精简autoit程序
风行者 发表于 2012-11-28 11:28



    那个就是我一楼所说的“代码迷惑”精简功能…
发表于 2012-11-28 11:44:02 | 显示全部楼层
回复 8# afan

那应该没有,只有自己开发这个功能了
 楼主| 发表于 2012-11-28 11:45:24 | 显示全部楼层
回复  afan

那应该没有,只有自己开发这个功能了
风行者 发表于 2012-11-28 11:44



    是啊,我也是没找到。
发表于 2012-11-28 11:54:07 | 显示全部楼层
回复 1# afan

A大,这个功能很实用,但实现起来可能较难。如果可能,最好参照编译器编译原理,按编译过程捕获错误,发现错误就自动读取包含函数(而不是包含文件)。(记得萧大有过捕错处理的小工具了。)
简单地按文件包含的合并处理,虽有利于脚本升级优化处理,但正如3楼描述,很可能导致脚本无益增加了大小。而且,按所有的外置包含文件合并打包的思路,也在一这程度上妨碍效率。况且,有些自定义的外置包含文件,是脚本开发者自由定义的UDF,估计实现起来有难处。
是否可能将‘代码管理器’的思路,按上文进行改造?不知是否妥当,请指正。
期待A大力作。

评分

参与人数 1金钱 +30 收起 理由
afan + 30 +.

查看全部评分

 楼主| 发表于 2012-11-28 14:00:17 | 显示全部楼层
本帖最后由 afan 于 2012-11-28 14:02 编辑
回复  afan
...如果可能,最好参照编译器编译原理,按编译过程捕获错误,发现错误就自动读取包含函数(而不是包含文件) ...
楼上风云 发表于 2012-11-28 11:54



    这其实就是代码迷惑的原理了,需要一行一行读、比较、处理… 但同样无法处理我之前说的功能缺失的问题。

编译时其实同样有整合的过程,也不会自动精简,除非脚本中含有需要精简的预处理。

‘代码管理器’不知道是指什么工具,似乎没用过……
发表于 2012-11-28 16:38:45 | 显示全部楼层
本帖最后由 楼上风云 于 2012-11-28 16:42 编辑

回复 12# afan

官网中有个Package.au3,类似打包结构。是否可能有参考价值?
‘代码管理器’,也是说论坛内的AU3代码管理器。不过主要只是实现分类汇总功能。
另外,大侠自己的DirInstall_udf 、Au3Chm 函数询捕 (帮助文档最佳搭档)_1.2,是否同样可以解决?
期待大侠的新作和新思路。
 楼主| 发表于 2012-11-28 18:30:09 | 显示全部楼层
回复 13# 楼上风云


    那些我都没用过,也不知道具体功能,你了解的比我多,不妨也弄个玩玩~
抽空写了个简单整合的小工具 AuMerger ,算自给自足了…
发表于 2012-11-29 07:20:53 | 显示全部楼层

标题

我经常是手工整合精简的,把常用的内容从头文件、udf中剥离出来,备份在一个文件中。同时也经常拆解函数,确实这样对增强对程序的理解力是有好处的。

整合精简原理跟广告过滤div、表单差不多,函数、变量名要找全,然后用正则过滤应该可以了。

评分

参与人数 1金钱 +30 贡献 +1 收起 理由
afan + 30 + 1 我很赞同

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 03:35 , Processed in 0.093051 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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