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

[AU3基础] 【已解决】注册表键的正则表达式

[复制链接]
发表于 2022-8-29 16:44:37 | 显示全部楼层
chishingchan 发表于 2022-8-29 14:46
点按钮之后,上下框内容相同!希望你优化一下代码

太简单的工具没什么用
 楼主| 发表于 2022-8-30 16:59:19 | 显示全部楼层
afan 发表于 2022-8-29 16:44
太简单的工具没什么用

Func _SID()
        Local $wshNetwork = ObjCreate("WScript.Network")
        Local $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
        Local $colItems = $objWMIService.ExecQuery("Select * from Win32_Account")
        Local $objItem
        For $objItem In $colItems
                If $objItem.Name = $wshNetwork.UserName Then
                        Return $objItem.SID
                EndIf
        Next
EndFunc
a大,上面这段代码是获取 SID 的函数,这个 SID 的注册表值每台计算机都不一样!例如:
。。。
[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]
。。。
使用正则表达式
1、如何获取这个 SID ? (S-1-5-21-776561741-583907252-1801674531-500)
2、如何转换 HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500 为 HKEY_CURRENT_USER

发表于 2022-8-30 17:15:27 | 显示全部楼层
Local $sSource = _
                '。。。' & @CRLF & _
                '[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]' & @CRLF & _
                '。。。'
Local $aSRE = StringRegExp($sSource, '(?i)\\([^\\]+)\\Software\\7-Zip\]', 1)
MsgBox(0, '', $aSRE[0])
Local $sSource = _
                '。。。' & @CRLF & _
                '[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]' & @CRLF & _
                '。。。'
Local $sSRERe = StringRegExpReplace($sSource, '(?mi)\h*\[HKEY_USERS\\[^\\]+(?=\\Software\\7-Zip\])', '[HKEY_CURRENT_USER')
MsgBox(0, '替换结果', $sSRERe)
 楼主| 发表于 2022-8-30 20:04:54 | 显示全部楼层

a大,这个要通用的!不能针对 [HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip] ,正则表达式里不应该有 \Software\7-Zip 等字眼。
 楼主| 发表于 2022-8-30 20:07:42 | 显示全部楼层
。。。 表示还有其他注册表内容
发表于 2022-8-30 20:11:23 | 显示全部楼层
chishingchan 发表于 2022-8-30 20:04
a大,这个要通用的!不能针对 [HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip ...

你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话,你的问题恐怕也只有我看得懂,没看到没其他人回吗?如果我都没……
 楼主| 发表于 2022-8-30 20:46:07 | 显示全部楼层
afan 发表于 2022-8-30 20:11
你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话, ...
Windows Registry Editor Version 5.00

; 由 Total Uninstall 产生


[HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip]
"Path"="C:\\Program Files\\7-Zip\"
"Path32"="C:\\Program Files\\7-Zip\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}]
@="7-Zip Shell Extension"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32]
@="C:\\Program Files\\7-Zip\\7-zip.dll"
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shellex\ContextMenuHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shellex\DragDropHandlers]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shellex\DragDropHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shellex\DragDropHandlers]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shellex\DragDropHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shellex\ContextMenuHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe]
@="C:\\Program Files\\7-Zip\\7zFM.exe"
"Path"="C:\\Program Files\\7-Zip\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"

[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]
"Path"="C:\\Program Files\\7-Zip\"
"Path32"="C:\\Program Files\\7-Zip\"

没办法!正则表达式这方面你就是老大!
 楼主| 发表于 2022-8-30 20:47:50 | 显示全部楼层
afan 发表于 2022-8-30 20:11
你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话, ...

我的问题就是写 reg2inf 作准备的!那本《精通》也不知道我要看到猴年马月才能写出来!
 楼主| 发表于 2022-8-30 20:48:45 | 显示全部楼层
本帖最后由 chishingchan 于 2022-8-30 20:51 编辑

这个注册表也只是个例子而已!没有针对性的,要通用。

如果使用普通字符串截取也是可以,就是追求完美而已。
发表于 2022-8-30 21:05:26 | 显示全部楼层
chishingchan 发表于 2022-8-30 20:48
这个注册表也只是个例子而已!没有针对性的,要通用。

如果使用普通字符串截取也是可以,就是追求完美而 ...
Local $sSource = _
                '[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]' & @CRLF & _
                '"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"' & @CRLF & @CRLF & _
                '[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]' & @CRLF & _
                '"Path"="C:\\Program Files\\7-Zip"' & @CRLF & _
                '"Path32"="C:\\Program Files\\7-Zip"'
Local $aSRE = StringRegExp($sSource, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', 1)
MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中[0]元素为: ' & $aSRE[0])
Local $sSource = _
                '[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]' & @CRLF & _
                '"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"' & @CRLF & @CRLF & _
                '[HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500\Software\7-Zip]' & @CRLF & _
                '"Path"="C:\\Program Files\\7-Zip"' & @CRLF & _
                '"Path32"="C:\\Program Files\\7-Zip"'
Local $sSRERe = StringRegExpReplace($sSource, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', '[HKEY_CURRENT_USER')
MsgBox(0, '替换结果', $sSRERe)

评分

参与人数 1威望 +2 金钱 +100 贡献 +10 收起 理由
chishingchan + 2 + 100 + 10 谢谢老大!

查看全部评分

发表于 2022-8-31 09:57:38 | 显示全部楼层
chishingchan 发表于 2022-8-28 21:21
请a大帮忙完成这个测试正则表达式的小程序,谢谢!

这个AU3专用的正则工具能分享下吗?谢谢
 楼主| 发表于 2022-8-31 20:13:15 | 显示全部楼层
zhanglei1371 发表于 2022-8-31 09:57
这个AU3专用的正则工具能分享下吗?谢谢

11# 不是有源码了吗?!
发表于 2022-9-1 06:35:37 | 显示全部楼层
chishingchan 发表于 2022-8-31 20:13
11# 不是有源码了吗?!

哦,好的,谢谢!
 楼主| 发表于 2022-9-1 17:22:23 | 显示全部楼层
本帖最后由 chishingchan 于 2022-9-1 17:33 编辑


应用在这里有点出错!帮忙看看,谢谢!
MsgBox(0, "", _Optimization("E:\Users\Administrator\Desktop\TEST.reg"))

Func _Optimization($sFilePath)
        Local $hFileOpen = FileOpen($sFilePath, 512)
    If $hFileOpen = -1 Then
        Return False
    EndIf
        Local $sFileRead = FileRead($hFileOpen)
        FileClose($hFileOpen)
        ;删除换行符
        $sFileRead = StringReplace($sFileRead, "" & @CRLF & "  ", "")
        ;将 \\ 替换为 \
        ;$sFileRead = StringReplace($sFileRead, "\", "")
        ;删除空行
        $sFileRead =StringRegExpReplace($sFileRead, '\R+\h*(?=\R)', '')
        ;删除[]下没有数据的行,忽略以 [- 开头的行
        $sFileRead = StringRegExpReplace($sFileRead, '(?mi)(?:^\h*\[h\V+\R+)+(?=\h*\[)', '')
        ;删除以 ; 开头的注释行
        $sFileRead = StringRegExpReplace($sFileRead, '(?m)^\h*;\V*\R*', '')
        ;将 [HKEY_USERS\SID 转换为 [HKEY_CURRENT_USER
        ;Local $sFileRead = StringRegExpReplace($sFileRead, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', '[HKEY_CURRENT_USER')
        Return $sFileRead
EndFunc

本帖子中包含更多资源

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

×
 楼主| 发表于 2022-9-1 17:28:56 | 显示全部楼层
将错误的那一行 (SID) 注释掉,才有画面:


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-20 11:40 , Processed in 0.081249 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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