Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Переход к содержимому файлу по lnk
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
prog_san



Joined: 29 Sep 2007
Posts: 277
Location: Пенза

Post (Separately) Posted: Sun Apr 19, 2020 23:24    Post subject: Переход к содержимому файлу по lnk Reply with quote

Задача проста: необходимо в панели перейти в директорию с файлом, на который lnk создан. Желательно установить курсор на файл.

Решения не нашел.
Жду ваших советов и рекомендаций.
_________________
Errare humanum est
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Mon Apr 20, 2020 01:33    Post subject: Reply with quote

Если устраивает переход в соседней панели, то Ctrl+влево/вправо (или Ctrl+Shift+вверх для новой вкладки).
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Apr 20, 2020 04:40    Post subject: Reply with quote

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 & """"

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Mon Apr 20, 2020 15:18    Post subject: Reply with quote

Делал себе такой вариант на 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

_________________
Win11 x64 Eng | TC DreamLair eternal pre-α


Last edited by LonerD on Tue Apr 21, 2020 20:49; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Apr 21, 2020 01:37    Post subject: Reply with quote

Решил пару плюшек добавить помимо поддержки символических ссылок.
 Может работать из следующих виртуальных папок:
Может переходить к виртуальным папкам. Если на входе стоит 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

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Fri Apr 24, 2020 21:57; edited 9 times in total
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Tue Apr 21, 2020 20:54    Post subject: Reply with quote

Flasher
Добавил /A.
Можно и без проверки в данном случае. На всякий случай добавляю в начале каждого скрипта. Мало ли, может ассоциации в системе на ahk-файлы, можно скрипт запустить вне Тотала и что-то нарушить. Про "фокусироваться из родителя" не очень понял - где и зачем.
_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
prog_san



Joined: 29 Sep 2007
Posts: 277
Location: Пенза

Post (Separately) Posted: Wed Apr 22, 2020 01:38    Post subject: Reply with quote

Спасибо!
_________________
Errare humanum est
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Apr 22, 2020 04:22    Post subject: Reply with quote

LonerD
Ассоциация без разницы где. А запускать скрипт вне ТС, взяв его с форума ТС, как минимум глупо. Фокусировка касалась выхода из папки, который на AHK легко заменяется более приятным поведением.


prog_san
См. обнову. Я там ещё пачку виртуальных папок добавил.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Thu Apr 23, 2020 23:28    Post subject: Reply with quote

Flasher
А можно как-то сделать переход к источнику от линка, который создан от имени другого пользователя (администратора)?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Apr 24, 2020 00:02    Post subject: Reply with quote

HEXFIX
А для линка есть разница, кем он был создан? Каков источник проблемы?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Fri Apr 24, 2020 08:50    Post subject: Reply with quote

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

Проверял на ярлыках из виртуальной папки Рабочий стол и из Рабочего стола Общего профиля непосредственно
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Apr 24, 2020 09:29    Post subject: Reply with quote

HEXFIX
Так а при чём здесь создание от имени другого пользователя? В Общих ярлыки могут появляться при установке программ любым юзером с годным правами. Никаких проблем с объектами, ведущими в общие папки нет. Я бы это сразу заметил ещё до первой редакции. Кстати, ошибка явно из какой-то прежней версии. Я там кое-что добавлял и причёсывал (сейчас тоже немного).
С виртуальной папкой проблем быть не должно. А для обращения из локальной папки в Общих нужно повышение прав. Т. е. ТС надо запускать от админа (включая AlwaysAsAdmin=1 в конфиге).
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Fri Apr 24, 2020 09:50    Post subject: Reply with quote

А почему тогда Ctrl+ стрелки работают на таких ярлыках в ТС, запущенном с обычными правами?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Apr 24, 2020 18:44    Post subject: Reply with quote

HEXFIX
Из виртуальных папок Ctrl + в ТС запрошенным образом не работает на любых ярлыках.
Как TС взаимодействует с API, мне не ведомо, но уж точно не через свойство GetLink. Wink
В общем, поправил для перехода оттуда по обычным путям. Для входа в виртуальные папки уже нужны будут права, но и ругательное окно появляться не будет.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Fri Apr 24, 2020 19:34    Post subject: Reply with quote

Я имел ввиду, что Ctrl + <> отрабатывает в Общих. Про виртуальные папки понятно, в них не работает, собственно поэтому мне этот скрипт и нужен.

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

А можно реализовать открытие в другой панели? Т.е. также, как это Ctrl + <> делают?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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