| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		Monarch-LFV
 
  
  Joined: 22 Jul 2019 Posts: 347
 
  | 
		
			
				  (Separately) Posted: Thu Nov 07, 2024 15:10    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Как же давно не хватало функции для работы с буфером, теперь стала возможна такая команда (особенно когда с почты приходится переходить по ссылкам):
 
 	  | Code: | 	 		  TOTALCMD#BAR#DATA
 
cd %$CLIPBOARD%
 
 
wcmicons.dll,59
 
Перейти по ссылке из буфера обмена  | 	  
 
Может кому и пригодится, но мне она уже не нужна. Давно написал скрипт на VBS, который обрабатывает разные ссылки, в том числе и кривые (с текстом вначале или к конце ссылки), ставит курсор на файл, если он есть в буфере, и другие возможности. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Mrak_Tlen
 
 
  Joined: 08 Oct 2024 Posts: 15
 
  | 
		
			
				  (Separately) Posted: Sat Nov 09, 2024 23:57    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				| Так и делился бы скриптом))) | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Monarch-LFV
 
  
  Joined: 22 Jul 2019 Posts: 347
 
  | 
		
			
				  (Separately) 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 | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		LonerD
 
  
  Joined: 04 Jan 2011 Posts: 1172 Location: Макеевка
  | 
		
			
				  (Separately) Posted: Sun Nov 10, 2024 17:57    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				У меня такой был на AHK.
 
 	  | Code: | 	 		  #NoEnv
 
#NoTrayIcon
 
#SingleInstance force
 
SetBatchLines, -1
 
if not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
 
  ExitApp
 
WinGet, hw_TTOTAL_CMD, ID, A
 
TargetFile := Clipboard
 
EnvGet, commander_exe, commander_exe
 
if FileExist(TargetFile)
 
{
 
  DllCall("LockWindowUpdate", "uint", hw_TTOTAL_CMD)
 
  if InStr(FileExist(TargetFile), "D")
 
    RunWait, %commander_exe% /O /S /P /L="%TargetFile%"
 
      else
 
        RunWait, %commander_exe% /O /S /A /L="%TargetFile%"
 
  DllCall("LockWindowUpdate", "uint", 0)
 
}
 
ExitApp  | 	 
  _________________ Windows 11 | TC DreamLair eternal pre-α | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		sa
 
 
  Joined: 29 Apr 2009 Posts: 2709
 
  | 
		
			
				  (Separately) Posted: Mon Nov 11, 2024 09:45    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				LonerD
 
Не уверен, но мне кажется, что /P подходит для позиционирования и на каталоге, и на архиве. Тогда от последнего if можно было бы отказаться. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
	
  
	 
	    
	   | 
	
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
  | 
   
 
  
Powered by phpBB © 2001, 2005 phpBB Group 
 
		 |