'=============================== VBS ==============================
' Назначение: Перейти к объекту в активной панели ТС по указанному
' в буфере имени файла/каталога, ключу реестра или GUID
' Параметры: "<имя плагина реестра в папке Сеть/FS-плагины>" "%P%Z"
'============================================= Автор: Flasher © ===
Option Explicit : Dim WSS, FSO, R, A, C, REx
If WSH.Arguments.Count <> 2 Then MsgBox "Укажите два параметра!",_
4144, " Переход по пути в панели ТС" : WSH.Quit
Set WSS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
A = WSS.RegRead(R): If A > 0 Or Err.Number <> 0 Then WSS.RegWrite R, 0, "REG_DWORD"
C = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
If A > 0 Then WSS.RegWrite R, A, "REG_DWORD"
On Error Goto 0 : If Len(C) = 0 Then Quit 0
Set REx = New RegExp
With REx
.IgnoreCase = 1
.Pattern = "(H[CK]|(::)?\{|%|[A-Z]:)[^\r\n""]+[^\s\\""]"
If .Test(C) Then
C = .Execute(C)(0)
Else .Pattern = " *[^\s/|:\\<*?>""][^\r\n\t|:<*?>""]*"
If .Test(C) Then C = RTrim(.Execute(C)(0)) Else Quit 1
End If : .Pattern = "^(::)?\{"
End With
C = Replace(Replace(C, " \ ", "\"), " / ", "/")
If InStr(1, "|HK|HC|", "|" & Left(C, 2) & "|", 1) Then
If Right(C, 1) = "]" Then C = Left(C, Len(C) - 1)
R = InStr(C, ":") : If R = 4 Or R = 5 Then _
C = Left(C, R - 1) & Mid(C, R + 1)
C = FSO.BuildPath(Replace(C, "/", "\"), "\")
Select Case UCase(Left(C, InStr(C, "\") - 1))
Case "HKCU" C = "HKEY_CURRENT_USER" & Mid(C, 5)
Case "HKLM" C = "HKEY_LOCAL_MACHINE" & Mid(C, 5)
Case "HKCR" C = "HKEY_CLASSES_ROOT" & Mid(C, 5)
Case "HKCC" C = "HKEY_CURRENT_CONFIG" & Mid(C, 5)
Case "HKU" C = "HKEY_USERS" & Mid(C, 4)
End Select : On Error Resume Next : WSS.RegRead(C)
Do Until Err.Number = 0
On Error Goto 0
If InStr(C, "\") = Len(C) Then Exit Do
C = FSO.GetParentFolderName(C) & "\"
On Error Resume Next : WSS.RegRead(C)
Loop : C = "\\\" & WSH.Arguments(0) & "\" & C
ElseIf Not REx.Test(C) Then
REx.Pattern = "^(%|[A-Z]:)?[^:?*<|>]+"
If REx.Test(C) Then C = WSS.ExpandEnvironmentStrings(REx.Execute(C)(0)) Else Quit 1
REx.Pattern = ".+/.+\\.+|.+\\.+/.+" : If REx.Test(C) Then _
REx.Pattern = "(.+)[\\/][^\\/]+[\\/]?$" :_
If REx.Test(C) Then Set C = REx.Execute(C)(0) :_
If FSO.FolderExists("\\?\" & C) + FSO.FileExists("\\?\" & C) = 0 Then C = C.Submatches(0)
If Mid(C, 2, 1) <> ":" Then
C = WSH.Arguments(1) & C
If FSO.FileExists("\\?\" & C) + FSO.FolderExists("\\?\" & C) = 0 Then
For R = 3 To UBound(Split(Replace(C, "/", "\"), "\"))
If FSO.FolderExists("\\?\" & C) Then R = 0 : Exit For Else C = FSO.GetParentFolderName(C)
Next : If R Then Quit 1
End If
End If
If FSO.FolderExists("\\?\" & C) + FSO.FileExists("\\?\" & C) = 0 Then Quit 1
Else On Error Resume Next
If Left(C, 1) = "{" Then C = "::" & C
If CreateObject("Shell.Application").NameSpace("shell:" & C) Is Nothing Then Quit 1
If Err Then Quit 1
End If
If StrComp(FSO.BuildPath(C, "\"), WSH.Arguments(1), 1) = 0 Then Quit 0
WSS.SendKeys "^{F10}" : WSS.Run """%COMMANDER_EXE%"" /A /O /S """ & C & """" : Quit 0
Sub Quit(T)
If T Then MsgBox "Содержимое буфера обмена не эквивалентно" & vbCr &_
"существующему пути в системе или реестре !", 4144, " Переход по пути в панели ТС"
Set FSO = Nothing : Set WSS = Nothing : Set REx = Nothing : WSH.Quit
End Sub |