View previous topic :: View next topic |
Author |
Message |
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sat Dec 23, 2017 19:37 Post subject: Синхронная смена каталогов |
|
|
Есть встроенная ТК команда "cm_SyncChangeDir", но она настолько немая и тугая что раздражает, она не показывает что включена или сбросилась, не показывает в какие каталоги лучше не заходить чтоб она не сбросилась. Вот это ее авто-отключение все портит, особенно когда имеешь дело с большим количеством каталогов.
Самый простой вариант решения этой проблемы - пока она включена, то в каталоги у которых нет похожих на другой панели заходить нельзя, то есть при нажатии "Enter" ничего не происходит. Или с этой функцией запускать еще "cm_CompareDirsWithSubdirs", которая хоть как-то будет отображать в какие папки не заходить. Но скорее все это реализовать сложно или невозможно, по-этому прошу скрипт, который открывает одновременно папку под курсором в активной панели и папку похожую по названию в другой панели, а если такой папки нет, то в скрипте будет две опции "ничего не делать" или "зайти в папку только в активной панели".
p.s. нашел в памяти ТК флаг состояния "cm_SyncChangeDir" по адресу "0075C4D8" размер 1 байт, можно ли его как-то использовать? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Dec 23, 2017 21:07 Post subject: |
|
|
ingerard wrote: | она не показывает что включена или сбросилась | Почему же? Показывает. Что в тулбаре, что в главном меню. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sat Dec 23, 2017 22:00 Post subject: |
|
|
Flasher
Quote: | Почему же? Показывает. Что в тулбаре, что в главном меню. |
Можно ли как-то считывать ее состояние?
И что насчет скрипта, сделать возможно? |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10275 Location: Россия, Саратов
|
(Separately) Posted: Sun Dec 24, 2017 00:32 Post subject: |
|
|
ingerard
Активность команды прекрасным образом отображается нажатым состоянием кнопки для неё на панели инструментов. Или обрамлением значка в меню. Если кнопка самопроизвольно стала отжатой, синхронизировать больше стало нечего. Вот и всё. Идею насчёт отображения "в какие папки не заходить" я, честно говоря, в изложенном виде не понял — ни со скриптом, ни без скрипта. Не говоря про то, что синхронно открываются папки не с похожими названиями, а с теми же самыми. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 13:03 Post subject: |
|
|
ingerard wrote: | Можно ли как-то считывать ее состояние? | Теоретически. Если бы был неких стиль окна, то — без проблем.
ingerard wrote: | И что насчет скрипта, сделать возможно? | Конечно. И опять же, не похожие, а одноимённые. Сделал пока по цепочке после буквы диска:
Code: | '============================== VBS ==============================
' Синхронное открытие каталогов в панелях ТС за вычетом букв диска
' Параметры: %V "%P" "%T"
' Ключ запрета несинхронного открытия: /n
'=================================================================
Set A = WSH.Arguments : V = A(0) : T = A(2)
With CreateObject("Scripting.FileSystemObject")
If .FolderExists("\\?\" & V) And .FolderExists("\\?\" & T) Then
If V <> A(1) Then Fd = T & .GetFileName(V) Else _
V = .GetParentFolderName(V) : Fd = .GetParentFolderName(T)
If .FolderExists("\\?\" & Fd) Then R = " /R=""" & Fd & """" _
Else If A.Named.Exists("n") Then WSH.Quit
End If
End With : If Mid(Fd, 2) = Mid(V, 2) Then _
CreateObject("WScript.Shell").Exec "%COMMANDER_EXE% /S /O /L=""" & V & """" & R |
Можно сделать и как в ТС, но с учётом исходных недовольств TC-шный синхронный переход при клике на .. из размноимённых папок не смущает? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sun Dec 24, 2017 14:44 Post subject: |
|
|
Flasher
Убрал кусок "If Mid(Fd, 2) = Mid(V, 2) Then _", просто не нужно строгое сравнение.
Теперь бы сделать скрипт на возврат к родительской папке и так чтоб сохранялась позиция курсора. И тогда будет все отлично
Quote: | синхронный переход при клике на .. из размноимённых папок не смущает? |
Было бы неплохо это учитывать.
Last edited by ingerard on Sun Dec 24, 2017 14:53; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 14:48 Post subject: |
|
|
ingerard
Строгое сравнение чего? Не вижу ответа на вопрос.
Позиция курсора нужна для сохранения в каком контексте? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sun Dec 24, 2017 14:56 Post subject: |
|
|
Flasher
Если оставить ту строчку сравнение, то при таком раскладе путей синхронизация не сработает:
Левая панель - "C:\Program Files\"
Правая панель - "D:\Copy\Program Files\"
Quote: | Позиция курсора нужна для сохранения в каком контексте? |
Когда возвращаюсь на один каталог вверх, курсор сбрасывается на первый элемент "..", а должен стоять на папке откуда я вышел. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 15:10 Post subject: |
|
|
ingerard wrote: | Было бы неплохо это учитывать. | Что "это"?
ingerard wrote: | Когда возвращаюсь на один каталог вверх | Назад (Alt+влево) по истории? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sun Dec 24, 2017 15:25 Post subject: |
|
|
Quote: | при клике на .. из разноимённых папок не смущает? |
Вы сделали скрипт для синхронного захода в папки, в нем все хорошо, только надо еще сделать условие для перехода по ".." если папки вдруг не одноименные, то синхронизацию не делать.
И так же еще нужен отдельно скрипт для синхронного выхода, только с учетом, что папки одноименные. И чтоб курсор был на этой же папке из которой вышли.
Нужно это для двух хоткеев, аналог "Enter", "Backspace" |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 15:52 Post subject: |
|
|
ingerard wrote: | если папки вдруг не одноименные, то синхронизацию не делать | Вот теперь понятно.
ingerard wrote: | Нужно это для двух хоткеев, аналог "Enter", "Backspace" | Тогда чистой синхронности не получится. Придётся в каждой из панелей выполнять выход. Отдельный скрипт тут совсем ни к чему:
Code: | '••••••••••••••••••••••••• VBS •••••••••••••••••••••••••
' Синхронное открытие одноимённых каталогов в панелях ТС
' Условие: требуется TCScript.dll
' Ключ запрета несинхронного открытия: /n
' Ключ перехода в родительский каталог: /b
'•••••••••••••••••••••••••••••••••• Автор: Flasher © •••
Option Explicit : Dim FSO, TCS, Key, SP, TP, N, i, T, Ln
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set Key = WSH.Arguments.Named
With TCS .Pause = 0 : .Wait = True : SP = .GetSrcPath
TP = .GetInfo("TP") : N = .GetInfo("SN") : .LockTC True
If N = ".." Or Key.Exists("b") Then
If StrComp(FN(SP), FN(TP), 1) = 0 Then
If FSO.FileExists("\\?\" & Left(SP, Len(SP) - 1)) Then
T = TP : If .GetInfo("A") = "R" Then TP = SP : SP = T
.SetLeftPath SP & ":" : .SetRightPath TP & ":"
ElseIf Right(SP, 1) = "\" Then Call Cm(2002)(4006)(2002)(4006) End If
ElseIf Not Key.Exists("n") Then Cm(2002) End If
Else : Dim REx : Set REx = New RegExp : REx.Pattern = "^\\{3}[^\\]+\\"
If FSO.FolderExists("\\?\" & REx.Replace(SP, "") & N) Then
If FSO.FolderExists("\\?\" & REx.Replace(TP, "") & N) Then _
Cm(2003) : .SetTrgPath TP & N & "\" :_
Else If Not Key.Exists("n") Then Cm(2003)
ElseIf FSO.FileExists("\\?\" & SP & N) Then
If FSO.FileExists("\\?\" & TP & N) Then .SetTrgPath TP & N & "\" :_
.Sleep 40 : Ln = Len(.GetInfo("TP")) - Len(TP)
Select Case True
Case Ln > 0 Cm(2003)
Case Ln < 0 Call Cm(4006)(570)(4006)
Case Ln = "0" Or Not Key.Exists("n") Cm(1001)
End Select
End If
End If : .LockTC False
End With : Set FSO = Nothing : Set TCS = Nothing
Function Cm(y) TCS.SendCommand y, 1: Set Cm = GetRef("Cm") End Function
Function FN(x) FN = FSO.GetFileName(Replace(x, "\\\", "")) End Function |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Thu Dec 28, 2017 01:47; edited 9 times in total |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sun Dec 24, 2017 18:47 Post subject: |
|
|
Flasher
Выдает ошибку:
Code: | Line: 9
Char: 22
Error: Object required
Code: 800A01A8
Source: TCScript |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 18:50 Post subject: |
|
|
ingerard
Какая папка в этот момент в неактивной панели? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ingerard
Joined: 04 Dec 2016 Posts: 128
|
(Separately) Posted: Sun Dec 24, 2017 18:57 Post subject: |
|
|
Flasher
C:\ и D:\213\
В любых панелях на любых папках выдает ошибку.
Ссылается именно на .GetTrgPath. Команда .GetSrcPath работает нормально. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 24, 2017 19:05 Post subject: |
|
|
ingerard
После замены на .GetInfo("TP") проблема исчезает? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
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
|