View previous topic :: View next topic |
Author |
Message |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 320
|
(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: 8
|
(Separately) Posted: Sat Nov 09, 2024 23:57 Post subject: |
|
|
Так и делился бы скриптом))) |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 320
|
(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: 2684
|
(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
|