Рестарт/перезапуск TC
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4 ... 10, 11, 12  Next  :| |:
Total Commander -> Автоматизация Total Commander

#31:  Author: FlasherLocation: Москва PostPosted: Mon Feb 25, 2013 19:59
    —
Avada wrote:
в отличие от кое-чего из предложенного ранее
И от чего же? Я пока не увидел.
Вот как я вижу то, что ещё может приблизится к понятию удобства и универсальности:

Code:
'============================================================
' Перезапуск ТС с возвратом к открытым в корне архивам,
' разным элементам в частично заблокированных вкладках
' и виртуальным папкам c правильной установкой курсора

' Условия:
' желательна последняя верcия TCFS2 с обновлениями TCFS2.ini
' необходима установка плагина TCFS2Tools

' Параметры: "%X%P%Z" "%T" ""%N"" ""%M""

' Flasher ©
'======================== Путь к TCFS2 ======================
TCFS2 = """%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"""
'=============== Путь к ini c секциями истории ==============
HrIni = "%COMMANDER_PATH%\RedirectINI\History.ini"
'============================================================
With WScript.Arguments
  If .Count < 4 Then MsgBox "Параметры не соответствуют описанию!", 48 : WScript.Quit : End If
  LP = .Item(0) : RP = .Item(1) : N = .Item(2) : M = .Item(3)
End With : Set FSO = CreateObject("Scripting.FileSystemObject")

With CreateObject("WScript.Shell")
  .Run TCFS2 & " /ef tcm(582)", 0, True
  HrIni = .ExpandEnvironmentStrings(HrIni)
  .Run TCFS2 & " /ef ""set_ini(`" & HrIni & "`, Active, Left, L_isActive)""", 0, True
  Set OIni = FSO.OpenTextFile(HrIni, 1)
  All = OIni.ReadAll : OIni.Close : Set OIni = Nothing
  LH  = Split(All, "[LeftHistory]"  & vbNewLine & "0=")(1)
  RH  = Split(All, "[RightHistory]" & vbNewLine & "0=")(1)
  AP  = Split(All, "[Active]"    & vbNewLine & "Left=")(1)
  L   = Left(LH, InStr(LH, vbnewline) - 1)
  R   = Left(RH, InStr(RH, vbnewline) - 1)
  LA  = Left(AP, InStr(AP, vbnewline) - 1)
  All = "" : .Run TCFS2 & " /ef tcm(24340)", 0, True
End With

If LA Then Side = "/P=L" Else Side = "/P=R"
If FSO.FileExists(LP & N) Then LO = "\|" Else N = ""
If FSO.FileExists(RP & M) Then RO = "\|" Else M = "" : Set FSO = Nothing
If Right(L, 1) = "/" Then L = Left(L, Len(L) - 1) : LO = "" : N = "" : End If
If Right(R, 1) = "/" Then R = Left(R, Len(R) - 1) : RO = "" : M = "" : End If
If Len(L) > Len(LP) Then LM = Left(L, Len(L)-(Len(LP)-1))
If Len(R) > Len(RP) Then RM = Left(R, Len(R)-(Len(RP)-1))

Set ListL = CreateObject("Scripting.Dictionary")
Set ListR = CreateObject("Scripting.Dictionary")
With CreateObject("Shell.Application")
  Desk = "\\" & .NameSpace("C:\").ParentFolder.ParentFolder & "\"
  For Each i In Array(&Ha, &H3, &H4, &H11, &H12)
    ListL.Add .NameSpace(i).Self.Path & "|" & LP , ""
    ListR.Add .NameSpace(i).Self.Path & "|" & RP , ""
  Next
End With

Sub Run(Par, Keys)
  With CreateObject("WScript.Shell")
    Set TC = .Exec("""%COMMANDER_EXE%"" " & Par)
    PID = TC.ProcessID : Do : A = .AppActivate(PID) : Loop Until A
    WScript.Sleep 40 : .Exec(TCFS2 & " /ef tcm(2121) " & Keys)
  End With : WScript.Quit
End Sub

Act = """tcm(4002), eval(L_isActive) | tcm(4001)"""
If LA = 1 Then Key = "tcm(4001)" Else Key = "tcm(4002)"
If LP = Desk And RP = Desk Then
  Run Side, Act & " tcm(2121) delay(0)" & Act
ElseIf LP = Desk And R="::|" & RP Then Run "/R=""" & R & """ /P=L", Key
ElseIf RP = Desk And L="::|" & LP Then Run "/L=""" & L & """ /P=R", Key
ElseIf LP = Desk And ListR.Exists(R) Then Run "/R=" & RM & " /P=L", Key
ElseIf RP = Desk And ListL.Exists(L) Then Run "/L=" & LM & " /P=R", Key
ElseIf LP = Desk Then Run "/P=L /R=" & RP & M & RO, Key
ElseIf RP = Desk Then Run "/P=R /L=" & LP & N & LO, Key
ElseIf ListR.Exists(R) And L="::|" & LP Then Param = "/L=""" & L & """ /R=""" & RM & """ " & Side
ElseIf ListL.Exists(L) And R="::|" & RP Then Param = "/L=""" & LM & """ /R=""" & R & """ " & Side
ElseIf ListL.Exists(L) And ListR.Exists(R) Then Param = "/L="""&LM&""" /R=""" & RM & """ " & Side
ElseIf ListL.Exists(L) Then Param = "/R=""" & R & M & RO & """ /L=""" & LM & """ " & Side
ElseIf ListR.Exists(R) Then Param = "/L=""" & L & N & LO & """ /R=""" & RM & """ " & Side
Else Param = "/L=""" & L & N & LO & """ /R=""" & R & M & RO & """ " & Side
End If : CreateObject("WScript.Shell").Run """%COMMANDER_EXE%"" " & Param

Прошу протестировать.


Last edited by Flasher on Thu Feb 28, 2013 16:37; edited 4 times in total

#32:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Feb 25, 2013 20:56
    —
Flasher
Результат запуска с кнопки в TC x32 (на x64 пока не смотрел):
Code:
---------------------------
Windows Script Host
---------------------------
Сценарий:   C:\Totalcmd\Utils\Scripts\Reload3.vbs
Строка:   21
Символ:   3
Ошибка:   Индекс выходит за пределы допустимого диапазона: '[number: 1]'
Код:   800A0009
Источник:    Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

Причина — редирект секций [LeftHistory] и [RightHistory] из wincmd.ini в другой файл. При отключении редиректа этих секций перезапуск работает. Когда проверял более ранние версии этого скрипта с аналогичной функциональностью, было то же самое ограничение.

#33:  Author: FlasherLocation: Москва PostPosted: Mon Feb 25, 2013 21:46
    —
Avada
Ага, точно. Позже исправлю.
Про результаты тестов всё же имелись в виду все нюансы возврата, а не просто "работает". Wink
И, кстати, функциональность нового не совсем аналогичная, в новом есть возможность возврата в виртуальный рабочий стол и установка курсора в нужной панели (в обычных папках - на нужном файле).


Last edited by Flasher on Tue Feb 26, 2013 00:35; edited 1 time in total

#34:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Feb 25, 2013 22:51
    —
Flasher
Нюансы возврата проверю и, если надо, распишу подробно обязательно, но предпочёл бы это сделать после исправления проблемы с редиректом — мне так гораздо удобнее.

#35:  Author: FlasherLocation: Москва PostPosted: Mon Feb 25, 2013 23:30
    —
Avada
Ладно, сделал пока по-простому с указанием ini-файла с сециями истории. Надеюсь, обе секции у тебя в одном файле содержатся?

#36:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 26, 2013 19:42
    —
Flasher
В одном, разумеется. Мне для всех редиректов больше одного файла и не надо.
Протестировал пока на двух машинах с XP. Возможно, из нижеперечисленного не всё и должно работать, но тем не менее отмечу следующее.
Локальные каталоги — запоминается и папка, и позиция курсора.
Вкладки с частичным закреплением — тут проблем опять же не вижу ни по папке, ни по позиции курсора.
Виртуальные папки проверял те, для которых есть встроенные команды в TC. Не сохраняется папка "Шрифты" (открывается предыдущая открытая перед ней папка). Прочие папки сохраняются, но их открытие происходит с задержкой в несколько секунд (где-то поменьше, как в папке "Корзина", где-то побольше, как в папке "Рабочий стол").
Среди открытых псевдопапок FS-плагинов у некоторых содержимое сохраняется нормально, у некоторых папка переоткрывается пустой, но в основной массе вместо этого открывается корень диска C (tcPhonebook, например, даже выводит сообщение, что не может войти в соответствущую папку, и только потом переключается на корневой каталог системного диска).
В архивах (ZIP, RAR и др.) всё нормально сохраняется на верхнем уровне. Если открыто что-то глубже — после перезапуска открывается каталог, содержащий архив.

#37:  Author: FlasherLocation: Москва PostPosted: Tue Feb 26, 2013 20:24
    —
Avada
Спасибо за тест. В общем и целом всё верно.
В локальных папках должна запоминаться не одна позиция курсора, а обе, если они на файлах, конечно.
Про "Шрифты" писал ранее, тут ничего не исправишь.
Задержка на папке "рабочий стол" связано с переключением фокуса и вызовом внутренней команды ТС. Остальные должны быстрее открываться.
Про открытые псевдопапок в FS-плагинах понял, причина вроде на поверхности, но проблемного места пока не вижу.
Про глубину архивов и понятно. По-другому никак. В названии скрипта отмечено в части корней.
Есть ещё такой нюанс: если курсор установлен в обеих панелях на одном и том же файле или [..], то фокус будет слева. Это поправимо следующим образом: я могу в данный ini-файл писать дополнительную секцию и ключ с установкой значения 0/1 (активна правая/левая панель, соотв.). Если устроит, могу добавить.

#38:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 26, 2013 20:48
    —
Flasher wrote:
Это поправимо следующим образом: я могу в данный ini-файл писать дополнительную секцию и ключ с установкой значения 0/1 (активна правая/левая панель, соотв.). Если устроит, могу добавить.

Пока точно не знаю, хотелось бы попробовать такой вариант, а там уже решить, удобно это или нет. А вообще у меня при старте TC всегда активна правая панель...

Flasher wrote:
В локальных папках должна запоминаться не одна позиция курсора, а обе, если они на файлах, конечно.

Для неактивного курсора — не запоминается (но я его отображаю через TWinKey — это не может влиять?).

#39:  Author: FlasherLocation: Москва PostPosted: Wed Feb 27, 2013 13:59
    —
Avada wrote:
А вообще у меня при старте TC всегда активна правая панель...
Имелось в виду, конечно, не слева, а в той панели, которая задана опционально при запуске ТС.
Поправил скрипт. По системным плагинам тоже. Обращаю внимание на параметры.

Avada wrote:
Для неактивного курсора — не запоминается (но я его отображаю через TWinKey — это не может влиять?).
Странно, проверил на трёх системах (2 ХР и 7) - везде запоминается. Твинки с выделением курсора в неактивной панели не влияет.

#40:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Feb 27, 2013 15:09
    —
Flasher
Не работает.
Code:
---------------------------
Windows Script Host
---------------------------
Сценарий:   C:\Totalcmd\Utils\Scripts\Reload3_2.vbs
Строка:   24
Символ:   33
Ошибка:   Предполагается наличие окончания инструкции
Код:   800A0401
Источник:    Ошибка компиляции Microsoft VBScript

---------------------------
ОК   
---------------------------

Flasher wrote:
Твинки с выделением курсора в неактивной панели не влияет.

Как выяснилось, влияет. Со стандартным неактивным курсором по предыдущей версии скрипта всё OK.

#41:  Author: FlasherLocation: Москва PostPosted: Wed Feb 27, 2013 15:45
    —
Avada
А путь к ini на свой исправил?

Avada wrote:
Как выяснилось, влияет.
Значит, влияет что-то другое, не выделение.

#42:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Feb 27, 2013 17:03
    —
Flasher wrote:
А путь к ini на свой исправил?

Конечно, как и в предыдущем варианте.

Flasher wrote:
Значит, влияет что-то другое, не выделение.

Во всяком случае, если неактивный курсор задан опцией в TWinKey, его позиция не сохраняется, а если через настройки TC — сохраняется.

#43:  Author: FlasherLocation: Москва PostPosted: Wed Feb 27, 2013 18:34
    —
Avada wrote:
Строка:   24
А что у тебя на 24 строке? Должно быть HrIni = .ExpandEnvironmentStrings(HrIni).

Avada wrote:
если неактивный курсор задан опцией в TWinKey, его позиция не сохраняется
Я проверял, у меня работает. Если в twinkey.ini установить только эту одну опцию, аналогичное поведение?

#44:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Feb 27, 2013 19:49
    —
Flasher wrote:
Если в twinkey.ini установить только эту одну опцию, аналогичное поведение?

Там одну только опцию установить не получится, надо ещё хотя бы цвет курсора задать. Но если это сделать — да, поведение аналогичное. Причём с и последней тестовой версией (4.2), и с последним релизом (1.105).

Flasher wrote:
Должно быть HrIni = .ExpandEnvironmentStrings(HrIni).

Да, но у меня это 21-я строка. На домашней машине ошибка указывает на 23-ю строку. Это HrIni & "`, Active, Left, 0)" "", 0, True. (На работе, видимо, пустая строка где-то в начале скрипта добавилась, потому что проблемная строка была по содержанию той же.)

#45:  Author: FlasherLocation: Москва PostPosted: Wed Feb 27, 2013 21:49
    —
Avada wrote:
Причём с и последней тестовой версией (4.2)
А если, скажем, взять 3.72?

В части ошибки скрипт поправил (скопипастил сперва неисправленный вариант, а там всего-то кавычку через пробел переставить надо было).



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


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

Goto page Previous  1, 2, 3, 4 ... 10, 11, 12  Next  :| |:
Page 3 of 12

Powered by phpBB © 2001, 2005 phpBB Group