修改了下最新版的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版本,你也可以自己编译
辛苦了,支持一下 谢谢分享~~~晚上试试 感谢分享,下载学习下 本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打开这个附件........................ 131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...
刚测试了下,用 WinRAR 可以解压~ 我看看吧 ,网上找不到纯净的下载,那个流氓下载我都不敢用了….. 131738 发表于 2022-4-2 11:30
本想看看你如何处理 AutoIt3Wrapper 中的 _CheckAllSourceFileNames 函数的,
但下载附件,7z 解压不能打 ...
正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试了一下,似乎不用这个函数也没有影响,反而因为缺少了对fileinstall函数包含文件路径的处理造成脚本编译失败.
此函数的逻辑是:
如果处理的脚本文件包含中文路径,中文这种字符会被替换为u,复制到临时文件夹, 相应的脚本的#include 语句会做处理.编译时会将此临时文件做为母本,由于处理了include语句,不会出错,但如果有fileinstall文件的,由于没有转换成绝对路径,反而会导致脚本失败.
因此,由于没有发现注释此函数会出现致命错误,偷个懒,直接跳过此函数的处理.
tubaba 发表于 2022-4-2 15:29
正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试 ...
什么时候中文路径还有编译问题了? 以前自带的代码迷惑对中文字符支持有问题,但路径问题从未听说,文件内容乱码也没遇到…… 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
tubaba 发表于 2022-4-2 16:11
所以,我觉得这个函数可以删除.可能受影响的就是tidy在含有中文的脚本路径不能自动折叠行.
这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如一些日文字符),中文是没有问题的,没必要检测。折叠应该也没影响。 afan 发表于 2022-4-2 16:59
这是把除了100多个半角英文字符以外的其它所有字符都替换了,仅仅是防止包含了某些不可处理的字符(比如 ...
{:1_630:}没有测试过日文,对我们来说没有影响就不需要这个函数了 tubaba 发表于 2022-4-2 17:20
没有测试过日文,对我们来说没有影响就不需要这个函数了
我也认为没必要(如果其中某些全局变量不受影响的话) {:1_630:} tubaba 发表于 2022-4-2 15:29
正如你所说,_CheckAllSourceFileNames这个函数有很多坑,这个函数的初衷是避免文件内容出现乱码,但我测试 ...
记不清什么时候出现的这个函数,大概是 14。0 开始的,刚开始这个函数时,测试含有中文的 au3 时控制台只是提示脚本被复制到系统用户目录后直接停止执行。当时就关闭了这个函数,也没发现关闭后出现什么问题。
有点语言歧视的感觉….
感谢分享,下载学习下