Monarch-LFV
 
  
 
  | 
		
			
				 Posted: Sun Nov 10, 2024 00:48    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Mrak_Tlen
 
Да нет, не жалко, даже на выбор 2 (мой код и чужой):
 
  Hidden text  	  | Code: | 	 		  ' Перейти по ссылке в буфере обмена (БО), 
 
' в том числе обрабатывает ссылки на пути реестра через плагин Registry 
 
 
On Error Resume Next
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
Set WshShell = CreateObject("WScript.Shell")
 
 
Clipb = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text")
 
path=Clipb
 
 
CrLfArr = Array(vbnewline, chr(13), chr(10))
 
For Each a In CrLfArr
 
  path = replace(path, a, "|")
 
Next
 
If Err.Number <> 0 then 
 
  WshShell.Popup "В буфере обмена нет текста", 1.8 , "Ошибка", vbCritical 
 
  Wscript.Quit
 
End If
 
 
'=== Вычленение ссылки-пути регуляркой из содержимого БО ================
 
path=replace(path, """", "")
 
path=replace(path, "/", "\")
 
path=trim(path) & "|"
 
 
Set objRegEx = CreateObject("VBScript.RegExp")
 
With objRegEx 
 
  .Pattern = ".*?(\W|^)(([A-Z]:|\\\\|hk).+?)\|" 
 
  .Global     = False
 
  .IgnoreCase = True
 
End With
 
Set Matches = objRegEx.Execute(path) 
 
Set Match = Matches.Item(0)
 
Set Submatches = Match.Submatches
 
path=Trim(Submatches.Item(1))
 
 
'=== Обработка ссылок на реестр через плагин Registry ===================
 
  if left(path,1) = "[" or ucase(left(path,2)) = "HK" or lcase(left(path,10)) = "компьютер\" then
 
    path=replace(path, "[", "")
 
    path=replace(path, "]", "")
 
    path=replace(path, "компьютер\", "", 1, 1, 1)
 
    path=replace(path, "hkcr\", "HKEY_CLASSES_ROOT\", 1, 1, 1)
 
    path=replace(path, "hkcc\", "HKEY_CURRENT_CONFIG\", 1, 1, 1)
 
    path=replace(path, "hkcu\", "HKEY_CURRENT_USER\", 1, 1, 1)
 
    path=replace(path, "hklm\", "HKEY_LOCAL_MACHINE\", 1, 1, 1)
 
    path=replace(path, "hku\", "HKEY_USERS\", 1, 1, 1)
 
  
 
    pr1=path
 
    if RegPath(pr1)=1 then sposob=1
 
     
 
    if isempty(sposob) then
 
      pr2=path & "\"
 
      if RegPath(pr2)=1 then sposob=2
 
    end if
 
    
 
    if isempty(sposob) then
 
      pr3=path
 
      for k=1 to 100
 
        pr3=pthminus(pr3)
 
        if RegPath(pr3 & "\")=1 then 
 
          sposob=3
 
          if k=1 then NoMsg=1 else NoMsg=0
 
          exit for
 
        end if
 
      next
 
    end if
 
  
 
    ' msgbox sposob & vbnewline & "pr1=" & pr1 & vbnewline & "pr2=" & pr2 & vbnewline & "pr3=" & pr3
 
  
 
    select case sposob
 
    case 1
 
      if right(pr1, 1)="\" then path = left(pr1, len(pr1)-1) else path=pr1
 
    case 2
 
      if right(pr2, 1)="\" then path = left(pr2, len(pr2)-1) else path=pr2
 
    case 3
 
      if right(pr3, 1)="\" then path = left(pr3, len(pr3)-1) else path=pr3
 
    case else 
 
      msg = MsgBox("Ветка реестра не найдена:" & string(2, vbnewline) & Clipb, vbCritical, "Ошибка")
 
      Wscript.Quit
 
    end select
 
    path="\\\Registry\" & path
 
  end if
 
 
  if lcase(left(path,11)) = "\\\registry" then Reg=1 
 
'=========================================================================
 
 
TCP = WshShell.ExpandEnvironmentStrings("%commander_exe%")
 
WshShell.run """" & TCP & """ /O /S /A """ & path & """"
 
 
wscript.Sleep 500
 
 
EnvPath = replace(WshShell.ExpandEnvironmentStrings(path), "|", "")
 
If  not FSO.FolderExists(path) And _
 
    not FSO.FileExists(path) And _
 
    not FSO.FolderExists(WshShell.ExpandEnvironmentStrings(path)) And _
 
    not FSO.FileExists(WshShell.ExpandEnvironmentStrings(path)) And _
 
    not FSO.FolderExists(EnvPath) And _
 
    not FSO.FileExists(EnvPath) And _
 
    not Reg=1 Then _
 
    msg = MsgBox("Путь не найден:" & vbnewline & vbnewline & Clipb, vbCritical, "Ошибка")
 
 
'=== Функции ============================================================
 
function RegPath(path)
 
  on error resume next
 
  x = WshShell.RegRead(path)
 
  If err.number = 0 Then RegPath=1 else RegPath=0
 
end function
 
 
function pthminus(path)
 
  on error resume next
 
  for i = 1 to len(path)    
 
    if mid(path, i, 1) = "\" then slash=i
 
  next
 
  pthminus=left(path, slash-1)
 
end function
 
  | 	 
  
 
Мой скрипт может:
 
1. Обрабатывать ссылки на реестр (вроде тот тоже может) и открывать в плагине Registry
 
2. Обрабатывать пути с переменными окружения и сетевые пути
 
3. Пути с кавычками и без, с пробелами (в начале и конце) и без
 
4. Пути с любым текстом вначале и в конце, даже если это просто кусок текста с множеством абзацев (если много ссылок, то переходит по первой найденной)
 
5. Если папки не существует, то переходит до максимальной найденной глубины и сообщает, что не нашел дальше.
 
6. Если в пути еще есть ссылка на файл, то ставит на него курсор сразу.
 
 
Второй (не мой) скрипт по ссылке. 
 
 
Я пользуюсь, понятное дело, своим скриптом и не парюсь (навешал на горячую клавишу), выделяю кусок текста с путем, а что там будет еще - неважно, он автоматом находит ссылку и переходит по ней. Пользуюсь уже пару лет, сбоев не было.
 
 
PS. Думаю, это сообщение следует перенести в раздел автоматизации. Пишу с телефона - не удобно. Сорри за оффтоп здесь.
  Last edited by Monarch-LFV on Mon Nov 11, 2024 14:41; edited 1 time in total | 
			 
		  |