找回密码
 加入
搜索
查看: 2797|回复: 32

[原创] 修改了下最新版的AutoIt3Wrapper.au3,20220425更新源码

[复制链接]
发表于 2022-3-30 15:52:06 | 显示全部楼层 |阅读模式
本帖最后由 tubaba 于 2022-4-25 09:46 编辑

修改了官网最新的AutoIt3Wrapper.au3.版本(21.316.1639.1),除了稍微汉化了大部分英文外.稍微调整了下控件布局.使之更适合中文语言.感觉这个AutoIt3Wrapper的界面是用KODA画出来的.

相比原版:
1.修改了运行逻辑,使之可以脱离scite运行.即无命令行启动.可以更换编译程序aut2exe的版本,也可以更换执行程序的版本。(若要使用此功能,请把此目录放至非scite目录下)
2.支持拖放文件到input.
3.添加了非ICO文件的支持,可以从exe.dll文件中提取指定图标.4.增加了流输出监视窗口,进行编译时,读取编译输出信息。运行脚本时,读取脚本consolewrite信息。此功能在右键菜单实现,需写入注册表。(选项卡“其它”设置)

此版本还是比较好用的.若源脚本需要管理员权限,会自动提升自升权限.即使编译成exe.也是标准执行等级,依赖的SCITE也可以标准用户身份运行, 可以无障碍执行tidy等自带工具.不会出现请求的操作需要提升的情况.

20220425 忘了编译成exe测试了,有个编译成exe后的执行bug.详情见25楼

20220424:继续修改了一些BUG,如果直接运行,会显示一个输出窗口,用来显示捕获的流。更直观的显示文件编译情况。同时在右键菜单中加入了运行(流)的选项,在此功能下,会捕捉目标脚本的std out流到输出窗口。若要注册到右键菜单,需切换到其它选项卡注册。

20220402 :本以为让此脚本脱离scite环境很容易.没想到还是有很多坑,软件的逻辑复杂.足以把人绕晕.另外,还有编码处理的问题.好在目前发现的一些问题都解决了.不保证没有bug.先用着再说吧,最近我们这里疫情严重,没心思搞这些.菜蓝子要看住.




20220425更新源码及exe版本,你也可以自己编译







本帖子中包含更多资源

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

×

评分

参与人数 5金钱 +190 贡献 +2 收起 理由
hhh666 + 20 很给力!
zpmc123 + 20 很给力!
xyhqqaa + 20
chinafla + 30 很给力!
afan + 2 赞一个!

查看全部评分

发表于 2022-3-30 16:10:37 | 显示全部楼层
辛苦了,支持一下
发表于 2022-4-1 09:11:55 | 显示全部楼层
谢谢分享~~~晚上试试
发表于 2022-4-1 15:14:54 | 显示全部楼层
感谢分享,下载学习下
发表于 2022-4-2 11:30:13 | 显示全部楼层
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打开这个附件........................
发表于 2022-4-2 11:38:57 | 显示全部楼层
131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...

刚测试了下,用 WinRAR 可以解压~
发表于 2022-4-2 14:59:26 | 显示全部楼层
我看看吧 ,网上找不到纯净的下载,那个流氓下载我都不敢用了…..
 楼主| 发表于 2022-4-2 15:29:01 | 显示全部楼层
131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...

正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试了一下,似乎不用这个函数也没有影响,反而因为缺少了对fileinstall函数包含文件路径的处理造成脚本编译失败.
此函数的逻辑是:
如果处理的脚本文件包含中文路径,中文这种字符会被替换为u,复制到临时文件夹, 相应的脚本的#include 语句会做处理.编译时会将此临时文件做为母本,由于处理了include语句,不会出错,但如果有fileinstall文件的,由于没有转换成绝对路径,反而会导致脚本失败.

因此,由于没有发现注释此函数会出现致命错误,偷个懒,直接跳过此函数的处理.







发表于 2022-4-2 15:46:09 | 显示全部楼层
tubaba 发表于 2022-4-2 15:29
正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试 ...

什么时候中文路径还有编译问题了? 以前自带的代码迷惑对中文字符支持有问题,但路径问题从未听说,文件内容乱码也没遇到……
 楼主| 发表于 2022-4-2 16:11:30 | 显示全部楼层
afan 发表于 2022-4-2 15:46
什么时候中文路径还有编译问题了? 以前自带的代码迷惑对中文字符支持有问题,但路径问题从未听说,文件 ...

所以,我觉得这个函数可以删除.可能受影响的就是tidy在含有中文的脚本路径不能自动折叠行.


原始函数如下
请看 $nScriptFileName = StringRegExpReplace($nScriptFileName, "[\x{0080}-\x{FFFF}]", "u")

Func _CheckAllSourceFileNames(ByRef $ScriptFileName)
        ; Get Include Paths
        Local $User_IncludeDirs = StringSplit(RegRead("HKCU\Software\AutoIt v3\Autoit", "Include"), ";")
        ReDim $IncludeDirs[2 + UBound($User_IncludeDirs) - 1]
        ; First store the AutoIt3 directory to the search table
        $IncludeDirs[0] = _PathFull($CurrentAutoIt_InstallDir) & "\include"
        $IncludeDirs_cnt = 1
        ; Add User Include Directories to the table
        For $x = 1 To $User_IncludeDirs[0]
                If StringStripWS($User_IncludeDirs[$x], 3) <> "" And FileExists($User_IncludeDirs[$x]) Then
                        $IncludeDirs[$IncludeDirs_cnt] = StringReplace($User_IncludeDirs[$x], '"', '')
                        $IncludeDirs_cnt += 1
                EndIf
        Next
        ; Add the scriptpath as last entry to the table
        Local $szDrive, $szDir, $szFName, $szExt
        _PathSplit($ScriptFileName, $szDrive, $szDir, $szFName, $szExt)
        $IncludeDirs[$IncludeDirs_cnt] = _PathFull($szDrive & $szDir)
        ;
        ; Add \ at the end of the Include dirs in the search table
        For $x = 0 To $IncludeDirs_cnt
                If StringRight($IncludeDirs[$x], 1) <> "\" Then
                        $IncludeDirs[$x] &= "\"
                EndIf
        Next
        ;
        ;  Process scriptfile
        ;
        ; use [1] for original script info
        ; use [2] for au3check script info
        $SourceFileNames[1][0] = $ScriptFileName
        $SourceFileNames[1][1] = ""
        $SourceFileNames[1][2] = ""
        ; change the newsourcename to pure ASCII characters
        Local $nScriptFileName = BinaryToString(StringToBinary($ScriptFileName, 1), 1)
        ; Replace any none standard ASCII character by a "u" to avoid issues
        $nScriptFileName = StringRegExpReplace($nScriptFileName, "[\x{0080}-\x{FFFF}]", "u")
        Local $tScriptFileName, $tScriptFileNameExt, $dummy
        Local $UTFIncludeNameFound = 0
        If $nScriptFileName <> $ScriptFileName Then
                _PathSplit($nScriptFileName, $dummy, $dummy, $tScriptFileName, $tScriptFileNameExt)
                $nScriptFileName = @TempDir & "\AutoIt3WrapperRunTmpFiles\" & $tScriptFileName & $tScriptFileNameExt
                $rc = FileCopy($ScriptFileName, $nScriptFileName, 1 + 8)
                $SourceFileNames[1][2] = $nScriptFileName
                $ScriptFileName = $nScriptFileName
        EndIf
        ; Get all #include lines from Main script into Array and process them
        Local $TSourceCode = FileRead($ScriptFileName)
        $TSourceCode = StringRegExpReplace($TSourceCode & @CRLF, "(?s)(?i)(\s*#cs\s*.-\#ce\s*)(\r\n)", "\2")
        $TSourceCode = StringRegExpReplace($TSourceCode, "(?s)(?i)" & '("")|(".*?")|' & "('')|('.*?')|" & "(\s*;.*?)(\r\n)", "\1\2\3\4\6")
        Local $inclArray = StringRegExp($TSourceCode, "(?m)(?s)(?i)^\s*(#include\s*[<'""]\s*\S*\s*[>'""]).*?$", 3)
        For $x = 0 To UBound($inclArray) - 1
                $UTFIncludeNameFound += Add_Include($inclArray[$x], @ScriptDir)
        Next
        ; Copy Main script to Temp dir when in contains #include filenames with UTF characters in the filename
        If $SourceFileNames[1][2] = "" Then
                If $UTFIncludeNameFound Then
                        _PathSplit($nScriptFileName, $dummy, $dummy, $tScriptFileName, $tScriptFileNameExt)
                        $nScriptFileName = @TempDir & "\AutoIt3WrapperRunTmpFiles\" & $tScriptFileName & $tScriptFileNameExt
                        $rc = FileCopy($ScriptFileName, $nScriptFileName, 1 + 8)
                        $SourceFileNames[1][2] = $nScriptFileName
                        $ScriptFileName = $nScriptFileName
                EndIf
        EndIf
        ;  Replace the tempfilename in the #include statements of all tempfiles
        For $x = 1 To UBound($SourceFileNames) - 1
                If $SourceFileNames[1][2] = "" Then ContinueLoop
                If $x = 2 Then ContinueLoop
                $TSourceCode = FileRead($SourceFileNames[$x][2])
                For $y = 2 To UBound($SourceFileNames) - 1
                        If $y = 2 Then ContinueLoop                              ; skip au3check table record
                        If $x = $y Then ContinueLoop                             ; skip own #include record
                        If $SourceFileNames[$y][2] <> "" Then
                                $TSourceCode = StringReplace($TSourceCode, $SourceFileNames[$y][1], '"' & $SourceFileNames[$y][2] & '"')
                        EndIf
                Next
                FileMove($SourceFileNames[$x][2], StringReplace($SourceFileNames[$x][2], ".au3", "_old.au3"), 1)
                FileWrite($SourceFileNames[$x][2], $TSourceCode)
                If $x = 1 Then ConsoleWrite('->Main script copied to temp file because of unicode characters in one of the filenames: ' & $nScriptFileName & @CRLF)
        Next
EndFunc   ;==>_CheckAllSourceFileNames


发表于 2022-4-2 16:59:21 | 显示全部楼层
tubaba 发表于 2022-4-2 16:11
所以,我觉得这个函数可以删除.可能受影响的就是tidy在含有中文的脚本路径不能自动折叠行.

这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如一些日文字符),中文是没有问题的,没必要检测。折叠应该也没影响。
 楼主| 发表于 2022-4-2 17:20:25 | 显示全部楼层
afan 发表于 2022-4-2 16:59
这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如 ...

没有测试过日文,对我们来说没有影响就不需要这个函数了
发表于 2022-4-2 17:32:14 | 显示全部楼层
tubaba 发表于 2022-4-2 17:20
没有测试过日文,对我们来说没有影响就不需要这个函数了

我也认为没必要(如果其中某些全局变量不受影响的话)
发表于 2022-4-2 20:43:47 | 显示全部楼层
tubaba 发表于 2022-4-2 15:29
正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试 ...

记不清什么时候出现的这个函数,大概是 14。0 开始的,刚开始这个函数时,测试含有中文的 au3 时控制台只是提示脚本被复制到系统用户目录后直接停止执行。当时就关闭了这个函数,也没发现关闭后出现什么问题。
有点语言歧视的感觉….
发表于 2022-4-4 13:19:28 | 显示全部楼层

感谢分享,下载学习下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 02:21 , Processed in 0.079661 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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