tubaba 发表于 2022-3-30 15:52:06

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

本帖最后由 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版本,你也可以自己编译







xzf680 发表于 2022-3-30 16:10:37

辛苦了,支持一下

xyhqqaa 发表于 2022-4-1 09:11:55

谢谢分享~~~晚上试试

oeasy 发表于 2022-4-1 15:14:54

感谢分享,下载学习下

131738 发表于 2022-4-2 11:30:13

本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打开这个附件........................

afan 发表于 2022-4-2 11:38:57

131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...

刚测试了下,用 WinRAR 可以解压~

131738 发表于 2022-4-2 14:59:26

我看看吧 ,网上找不到纯净的下载,那个流氓下载我都不敢用了…..

tubaba 发表于 2022-4-2 15:29:01

131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...

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

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







afan 发表于 2022-4-2 15:46:09

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

什么时候中文路径还有编译问题了? 以前自带的代码迷惑对中文字符支持有问题,但路径问题从未听说,文件内容乱码也没遇到……

tubaba 发表于 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
        ; First store the AutoIt3 directory to the search table
        $IncludeDirs = _PathFull($CurrentAutoIt_InstallDir) & "\include"
        $IncludeDirs_cnt = 1
        ; Add User Include Directories to the table
        For $x = 1 To $User_IncludeDirs
                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 for original script info
        ; use for au3check script info
        $SourceFileNames = $ScriptFileName
        $SourceFileNames = ""
        $SourceFileNames = ""
        ; 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 = $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 = "" Then
                If $UTFIncludeNameFound Then
                        _PathSplit($nScriptFileName, $dummy, $dummy, $tScriptFileName, $tScriptFileNameExt)
                        $nScriptFileName = @TempDir & "\AutoIt3WrapperRunTmpFiles\" & $tScriptFileName & $tScriptFileNameExt
                        $rc = FileCopy($ScriptFileName, $nScriptFileName, 1 + 8)
                        $SourceFileNames = $nScriptFileName
                        $ScriptFileName = $nScriptFileName
                EndIf
        EndIf
        ;Replace the tempfilename in the #include statements of all tempfiles
        For $x = 1 To UBound($SourceFileNames) - 1
                If $SourceFileNames = "" Then ContinueLoop
                If $x = 2 Then ContinueLoop
                $TSourceCode = FileRead($SourceFileNames[$x])
                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] <> "" Then
                                $TSourceCode = StringReplace($TSourceCode, $SourceFileNames[$y], '"' & $SourceFileNames[$y] & '"')
                        EndIf
                Next
                FileMove($SourceFileNames[$x], StringReplace($SourceFileNames[$x], ".au3", "_old.au3"), 1)
                FileWrite($SourceFileNames[$x], $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

afan 发表于 2022-4-2 16:59:21

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




这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如一些日文字符),中文是没有问题的,没必要检测。折叠应该也没影响。

tubaba 发表于 2022-4-2 17:20:25

afan 发表于 2022-4-2 16:59
这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如 ...

{:1_630:}没有测试过日文,对我们来说没有影响就不需要这个函数了

afan 发表于 2022-4-2 17:32:14

tubaba 发表于 2022-4-2 17:20
没有测试过日文,对我们来说没有影响就不需要这个函数了

我也认为没必要(如果其中某些全局变量不受影响的话) {:1_630:}

131738 发表于 2022-4-2 20:43:47

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

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

fengjie 发表于 2022-4-4 13:19:28


感谢分享,下载学习下
页: [1] 2 3
查看完整版本: 修改了下最新版的AutoIt3Wrapper.au3,20220425更新源码