Переход к содержимому файлу по lnk
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Переход к содержимому файлу по lnk Author: prog_sanLocation: Пенза PostPosted: Sun Apr 19, 2020 23:24
    —
Задача проста: необходимо в панели перейти в директорию с файлом, на который lnk создан. Желательно установить курсор на файл.

Решения не нашел.
Жду ваших советов и рекомендаций.

#2:  Author: CaptainFlintLocation: Москва PostPosted: Mon Apr 20, 2020 01:33
    —
Если устраивает переход в соседней панели, то Ctrl+влево/вправо (или Ctrl+Shift+вверх для новой вкладки).

#3:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2020 04:40
    —
prog_san
Давненько делал себе скриптец (правда у себя с TCFS2 вместо %C_P% для скорости):
Code:
'================================= VBS =================================
' Перейти к исходному файлу символической ссылки или ярлыка под курсором
' Параметры: %V [/T]            (ключ /T — для открытия в новой вкладке)
'=======================================================================
If WSH.Arguments.Named.Exists("T") Then T = " /T"
LT = CreateObject("Shell.Application").NameSpace(0).ParseName(WSH.Arguments(0)).ExtendedProperty("LinkTarget")
If Not IsEmpty(LT) Then CreateObject("WScript.Shell").Exec "%COMMANDER_EXE% /A /O /S" & T & " """ & LT & """"

#4:  Author: LonerDLocation: Донецк PostPosted: Mon Apr 20, 2020 15:18
    —
Делал себе такой вариант на AutoHotkey
Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair                        ;
; Script: Goto path from shortcut                  ;
; Script version: 1.3 (2020.04.21)                 ;
; Script author: LonerD                            ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameter:                                       ;
;  1) %P%N (required)                              ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

#NoEnv
#NoTrayIcon
#SingleInstance force

if not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
  ExitApp
WinGet, hw_TTOTAL_CMD, ID, A

LnkPath = %1%
if !FileExist(LnkPath)
  ExitApp

SplitPath, LnkPath ,,, LnkExt
if ( LnkExt <> "lnk" )
  ExitApp

EnvGet, commander_exe, commander_exe

FileGetShortcut, % LnkPath, LnkPathGo

if FileExist(LnkPathGo)
  RunWait, % commander_exe " /O /S /A /L=" """" LnkPathGo """"
else
  ExitApp

if InStr(FileExist(LnkPathGo), "D")
  PostMessage, 1075, 2002,,, % "ahk_id " hw_TTOTAL_CMD

ExitApp


Last edited by LonerD on Tue Apr 21, 2020 20:49; edited 1 time in total

#5:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2020 01:37
    —
Решил пару плюшек добавить помимо поддержки символических ссылок.
 Может работать из следующих виртуальных папок:
Может переходить к виртуальным папкам. Если на входе стоит mmc, то переходит к оснастке из параметра.
Code:
'================================== VBS ==================================
' Перейти к исходному объекту символической ссылки или ярлыка под курсором
' Параметры: %V [/R] [/T]         | /R — ключ для открытия в другой панели
'                                 | /T — ключ для открытия в новой вкладке
'==================================================== Автор: Flasher © ===
Option Explicit : Dim A, T, FSO, ShA, WSS, LT, PN, i, N, L
Set A = WSH.Arguments
If Right(A(0), 1) = "\" Then WSH.Quit
If A.Named.Exists("T") Then T = "/T "
If A.Named.Exists("R") Then T = T & "/R="
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ShA = CreateObject("Shell.Application")
Set WSS = CreateObject("WScript.Shell")
If Left(A(0), 2) <> "\\" Then
  Set LT = ShA.NameSpace(0).ParseName(A(0))
Else  PN = FSO.GetParentFolderName(Mid(A(0), 3))
  For Each i in Array(0,5,46,47,53,54,55,"Profile","Public","Downloads","Programs",_
  "Links","My Video","My Pictures","My Music","Contacts","User Pinned","SavedGames",_
  "CommonDownloads","MusicLibrary","VideosLibrary","DocumentsLibrary","PicturesLibrary",_
  "::{7BE9D83C-A729-4D97-B5A7-1B7313C39E0A}","::{865E5E76-AD83-4DCA-A109-50DC2113CE9A}",_
  "::{D34A6CA6-62C2-4C34-8A7C-14709C1AD938}","::{323CA680-C24D-4099-B94D-446DD2D7249E}",_
  "::{ED50FC29-B964-48A9-AFB3-15EBB9B97F36}","::{B155BDF8-02F0-451E-9A26-AE317CFD7779}")
    If Not IsNumeric(i) Then i = "shell:" & i
    Set N = ShA.NameSpace(i) : If Not N Is Nothing Then _
    If PN = N Then Set LT = N.ParseName(FSO.GetFileName(Mid(A(0), 3))) : Exit For
  Next
  If Not IsObject(LT) Then Quit
End If
On Error Resume Next
If LT.IsLink And LCase(Right(A(0), 4)) = ".lnk" Then
  L = LT.GetLink.Target.Path
  If Err Then L = LT.ExtendedProperty("LinkTarget")
  If Left(L, 3) = "::{" Then
    Err.Clear : If ShA.NameSpace("shell:" & L) Is Nothing Then Quit
    If Err.Number Then Quit
  Else
    If Mid(L, 2, 2) <> ":\" Then Call Quit Else If Not Err Then _
    If FSO.GetFileName(L) = "mmc.exe" Then A = LT.GetLink.Arguments:_
    If Len(A) Then L = A End If : L = WSS.ExpandEnvironmentStrings(L)
    If FSO.FileExists(L) + FSO.FolderExists(L) = 0 Then Quit
  End If
Else L = LT.ExtendedProperty("LinkTarget") End If
If Not IsEmpty(L) Then WSS.Exec "%COMMANDER_EXE% /A /O /S " & T & """" & L & """"
Quit: Sub Quit: Set ShA = Nothing : Set FSO = Nothing : Set WSS = Nothing : WSH.Quit :End Sub

 2LonerD


Last edited by Flasher on Fri Apr 24, 2020 21:57; edited 9 times in total

#6:  Author: LonerDLocation: Донецк PostPosted: Tue Apr 21, 2020 20:54
    —
Flasher
Добавил /A.
Можно и без проверки в данном случае. На всякий случай добавляю в начале каждого скрипта. Мало ли, может ассоциации в системе на ahk-файлы, можно скрипт запустить вне Тотала и что-то нарушить. Про "фокусироваться из родителя" не очень понял - где и зачем.

#7:  Author: prog_sanLocation: Пенза PostPosted: Wed Apr 22, 2020 01:38
    —
Спасибо!

#8:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2020 04:22
    —
LonerD
Ассоциация без разницы где. А запускать скрипт вне ТС, взяв его с форума ТС, как минимум глупо. Фокусировка касалась выхода из папки, который на AHK легко заменяется более приятным поведением.


prog_san
См. обнову. Я там ещё пачку виртуальных папок добавил.

#9:  Author: HEXFIXLocation: Калининград PostPosted: Thu Apr 23, 2020 23:28
    —
Flasher
А можно как-то сделать переход к источнику от линка, который создан от имени другого пользователя (администратора)?

#10:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 00:02
    —
HEXFIX
А для линка есть разница, кем он был создан? Каков источник проблемы?

#11:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 24, 2020 08:50
    —
В виртуальной папке Рабочий стол отображаются все ярлыки на собственно Рабочем столе. Часть из них находится в папке Рабочий стол моего профиля — с ними никаким проблем нет, скрипт работает, другая часть находится в папке Рабочий стол профиля Общие и тут использование скрипта выдаёт такую ошибку:
Code:
Cтрока:29
Символ:5
Ошибка: Разрешение отклонено
Код: 800A0046

Проверял на ярлыках из виртуальной папки Рабочий стол и из Рабочего стола Общего профиля непосредственно

#12:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 09:29
    —
HEXFIX
Так а при чём здесь создание от имени другого пользователя? В Общих ярлыки могут появляться при установке программ любым юзером с годным правами. Никаких проблем с объектами, ведущими в общие папки нет. Я бы это сразу заметил ещё до первой редакции. Кстати, ошибка явно из какой-то прежней версии. Я там кое-что добавлял и причёсывал (сейчас тоже немного).
С виртуальной папкой проблем быть не должно. А для обращения из локальной папки в Общих нужно повышение прав. Т. е. ТС надо запускать от админа (включая AlwaysAsAdmin=1 в конфиге).

#13:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 24, 2020 09:50
    —
А почему тогда Ctrl+ стрелки работают на таких ярлыках в ТС, запущенном с обычными правами?

#14:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 18:44
    —
HEXFIX
Из виртуальных папок Ctrl + в ТС запрошенным образом не работает на любых ярлыках.
Как TС взаимодействует с API, мне не ведомо, но уж точно не через свойство GetLink. Wink
В общем, поправил для перехода оттуда по обычным путям. Для входа в виртуальные папки уже нужны будут права, но и ругательное окно появляться не будет.

#15:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 24, 2020 19:34
    —
Я имел ввиду, что Ctrl + <> отрабатывает в Общих. Про виртуальные папки понятно, в них не работает, собственно поэтому мне этот скрипт и нужен.

Теперь скрипт работает. И из виртуальных папках на проблемных линках. И никаких прав не требует Wink

А можно реализовать открытие в другой панели? Т.е. также, как это Ctrl + <> делают?



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group