Рестарт/перезапуск TC

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

KopBuH
Ваш вариант не закрывает ТС, а убивает его процесс. При этом после запуска не сохраняться открытые перед "смертью" директории на панелях при повторном запуске, в отличии от закрытия ТС через посыл Alt+F4.
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

[s]в отличии от закрытия ТС через посыл Alt+F4.[/s]
Поправка - через cm_Exit (ибо Alt+F4 не при всяких настройках закрывает ТС).
не сохраняться открытые перед "смертью" директории
У меня сохраняет.
KopBuH
Ваш вариант не закрывает ТС, а убивает его процесс.
Самое плохое - этот вариант не закрывает и не убивает процесс 32-х битного ТС под 64-битной Windows.
Непонятный нюанс. В предложенном варианте процесс не убивается (не найден PID) и новая копия Тотала не запускается. А вот если добавить вначале перед comspec скрытие консольных окон hidcon - запускается новая версия Тотала, но старая не убивается. Почему? Ещё не сталкивался чтобы скрыватель консоли так влиял на консольную команду.
И почему PID не находится? Taskill ведь может убивать 32-х битные процессы.
Последний раз редактировалось LonerD Чт мар 07, 2013 16:29, всего редактировалось 1 раз.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

gora
LonerD
Думаю, и до этого, и сейчас сказано уже достаточно, чтобы этот вариант в качестве рекомендуемого больше не рассматривать.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Avada
А мне наоборот - вариан реализации кажется весьма интересным, но пока не полностью работоспособным.

Flasher
Если ещё актуально по скрипту.
Погонял под Win8x64, Тотал 32-х и 64-х битный, с последним TwinKey (курсор в неактивной панели в TwinKey отключен, в Тотале - включен).
Положение курсора сохраняется только на файлах, но не на каталогах. Внутри архивов положение курсора не сохраняется.
Если файлов в панели много и курсор находится не на первых файлах - то после перезапуска положение его сохраняется, но на экране он не виден, нужно крутнуть чуток вниз список файлов.

Если добавить в авторан активацию Virtual Panel

Код: Выделить всё

# Activate Virtual Panel Plugin
CommandExec /CD "\\\Virtual Panel"
Sleep 50
SendCommand cm_GotoPreviousDir
то при при положении курсора на правой панели после запуска открывается совсем не то, что ожидалось; при положении курсора на левой панели - положение курсора сохраняется через раз.

В целом даже без этих строк после нескольких десятков перезапусков было
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD писал(а):Если ещё актуально по скрипту.
А где я отменял актуальность? :) Это Avada написал, что погоняет на других машинах, но так, по всей видимости, и не погонял..
LonerD писал(а):Положение курсора сохраняется только на файлах, но не на каталогах.
Единственное, что можно делать, чтобы оставлять курсор на папках, это входить и выходить из них (причём менять фокус, если папки в обеих панелях). Сомневаюсь, что тебе такое понравится, да и остальным тоже.
LonerD писал(а):Внутри архивов положение курсора не сохраняется.
Знаю, не предусмотрено ТС. Только фокус активности сохраняется (это тоже в какой-то мере положение).
LonerD писал(а):но на экране он не виден, нужно крутнуть чуток вниз список файлов.
Крутить ничего не надо, достаточно воспользоваться одинарным нажатием вверх/вниз.
LonerD писал(а):Если добавить в авторан активацию...
на левой панели - положение курсора сохраняется через раз
Ещё бы. Кто последний, тот и водит. Либо скрипт, либо Autorun.
Как вариант - ставить решётку в autorun.cfg перед указанной командой. Но это уже для твоего частного случая.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):Это Avada написал, что погоняет на других машинах, но так, по всей видимости, и не погонял..
Подробный анализ требует времени, которого у меня пока в достаточном количестве нет. Кое-что, впрочем, сообщить могу.
Упоминавшаяся уже утилита ReloadTC, да, не работает в 64-битном TC, но зато обладает одним весьма ценным качеством, которого я у конкурентов не наблюдаю. Поясню на примере.
Допустим, у нас есть TC, который в норме запускается без всяких специальных параметров, с подхватыванием INI-файла, лежащего в папке TC. Допустим также, что предусмотрен вызов (в том числе через ярлык) того же самого TC с минимальными настройками, близкими у умолчальным. Для такого тестового запуска значениями параметров /I и /F указаны другие INI-файлы.
Итак, ярлыком запускается (с параметрами) тестовая версия TC. Создадим там кнопку для перезапуска. Если в ней используется ReloadTC, он именно этот самый TC с этими самыми параметрами опять и перезапустит. Если используются средства, где указана переменная %Commander_EXE%, после закрытия окна тестового TC запущен будет другой, полнофункциональный вариант той же копии TC (тот же экзешник, но без параметров и, следовательно, с другими INI-файлами). И скрипт, и Tinny TC Restarter работают именно так.
Интересно, можно ли тут совместить обе полезности?
На форуме проблема анализа командной строки поднималась, к примеру, здесь, но это было очень давно. Что с тех пор изменилось? Что можно сделать сейчас при запуске утилиты/скрипта из текущей копии TC? Для основного файла настроек есть переменная %COMMANDER_INI%. Для настроек FTP аналога нет, но этим в первом приближении пока что можно пренебречь.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada писал(а):ReloadTC, он именно этот самый TC с этими самыми параметрами опять и перезапустит.
"Этот самый" он запустить никак не может, он аналогично создаёт новый процесс, ибо старый уже был захлопнут.
Avada писал(а):%Commander_EXE%, после закрытия окна тестового TC запущен будет другой, полнофункциональный вариант той же копии TC (тот же экзешник, но без параметров и, следовательно, с другими INI-файлами). И скрипт, и Tinny TC Restarter работают именно так.
В моём случае не без параметров, а с параметрами, но не теми, с какими был запущен Тотал через ярлык.
Avada писал(а):можно ли тут совместить обе полезности?
Совмещение противоречит сути возврата, т.к. ТС запускается с определёнными параметрами /L= /R= /P=L/R, которые также могут фигурировать в активном ТС.
Если речь идёт только об /I и /F, то, в принципе, их вытащить и подставить в комстроку можно, только в данном случае PID из Auotorun точно потребуется.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):Если речь идёт только об /I и /F, то, в принципе, из вытащить и подставить в комстроку можно, только в данном случае PID из Auotorun точно потребуется.
Да, речь идёт только об этом.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Flasher
А где я отменял актуальность?
Нигде.
Сомневаюсь, что тебе такое понравится, да и остальным тоже.
Тоже сомневаюсь. Тогда для себя не вижу смысла в использовании скрипта. :cry: Желаемый результат с ним получается не всегда - не будешь же каждый раз следить где находится курсор (на файле или на каталоге) при перезапуске.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada
Ясно. Сделать - сделаю, но вот только не знаю, как быть - править старый пост или запостить MIME?

LonerD
Весьма странная попытка увидеть смысл использования только там, где всё без исключения работает. Может, и от ТС откажешься? :wink:
Любой иной перезапуск тебе такого возврата не сделает. Утеривать текущие позиции (в архивах, в системных плагинах, в виртуальных папках, в заблокированных вкладках) лично мне никакого удовольствия после перезапуска, которым я частенько пользуюсь, не доставляет. Если тебе доставляет, не вопрос, юзай простейшие варианты (уже давно мне неинтересные). Суть скрипта прежде всего в запоминании открытых псевдо/папок, мысль о позиции курсора на файлах возникла сравнительно недавно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Flasher
Может, и от ТС откажешься?
Нет.
перезапуска, которым я частенько пользуюсь
У меня Тотал иногда сутки и более не закрывается и не перезапускается.
Суть скрипта прежде всего в запоминании открытых псевдо/папок, мысль о позиции курсора на файлах возникла сравнительно недавно.
Мне до твоего скрипта ни одна ни вторая мысль даже не приходили, потому пока не осознал все удобства этого метода. :)
Единственное, что можно делать, чтобы оставлять курсор на папках, это входить и выходить из них (причём менять фокус, если папки в обеих панелях). Сомневаюсь, что тебе такое понравится, да и остальным тоже....
Тоже сомневаюсь.
PS. Уже не так сомневаюсь.
Я ведь твоим скриптом перехода к закладкам (в том числе если закладка стоит на папке) пользуюсь - нравится :lol:
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):Ясно. Сделать - сделаю, но вот только не знаю, как быть - править старый пост или запостить MIME?
Мне, честно говоря, без особой разницы. Ну, пускай MIME будет.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD писал(а):Мне до твоего скрипта ни одна ни вторая мысль даже не приходили, потому пока не осознал все удобства этого метода.
Наверно, частично заблокированными вкладками вообще не пользуешься и в архивы почти не заходишь. Если бы пользовался, сразу понял бы всю соль, ибо перезапускать при перенастройках ТС (автозагрузки, плагинов) просто необходимо. Перезапуски также требуются при перезаполнении памяти, багах и висах.
LonerD писал(а):Я ведь твоим скриптом перехода к закладкам (в том числе если закладка стоит на папке) пользуюсь - нравится
Я не думаю, что поведение будет аналогичное, как и при активном окне ТС. Не пробовал ещё блокировать окно только при его появлении. Могут быть артефакты, и некоторая задержка добавится. Ладно, посмотрю, как можно грамотней реализовать. Если получится криво, то выкладывать не буду.

Avada
Собственно, обойдусь без Autorun-a, так что можно и обновить.
Такой вопрос. На данный момент мы задаём ini в отдельной переменной. А что если в ini-файле, задаваемым через ключ, нет редиректа, или он ведёт на другой ini-файл с историей?
И как ведёт себя ReloadTC, если писать к файлам конфигурации не путь целиком, а только имя файла?
P.S. И не пора бы уже тему, прямо касаемую автоматизации, перенести в нужный подфорум?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):На данный момент мы задаём ini в отдельной переменной. А что если в ini-файле, задаваемым через ключ, нет редиректа, или он ведёт на другой ini-файл с историей?
В моём случае — именно что нет. Да, такие варианты надо учесть.
Flasher писал(а):И как ведёт себя ReloadTC, если писать к файлам конфигурации не путь целиком, а только имя файла?
Я, конечно, могу проверить специально, но у меня в параметрах TC указывается не только другое имя, но и другой путь (вообще на другом диске).
Кстати, у ReloadTC могут быть собственные параметры, в том числе и для INI-файлов. Если они используются (у меня — нет), то подменяют стандартные (это есть в документации утилиты).
Flasher писал(а):И не пора бы уже тему, прямо касаемую автоматизации, перенести в нужный подфорум?
Безусловно, пора, и я это делаю. Общая тема по перезапуску TC необходима, но её действительно логично и правильно держать в "Автоматизации".
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

У меня exe-шка на AutoIt, с таким кодом:

Код: Выделить всё

Global $title

if processexists("TOTALCMD64.EXE") then
    $title = _Process2Win("TOTALCMD64.EXE")
    WinClose($title)
    Run("Путь к папке\TOTALCMD.exe")
elseIf processexists("TOTALCMD.EXE") then
    $title = _Process2Win("TOTALCMD.EXE")
    WinClose($title)
    Run("Путь к папке\TOTALCMD64.exe /i="Путь к папке\WinCmd64.ini")
endif

func _Process2Win($pid)
    if isstring($pid) then $pid = processexists($pid)
    if $pid = 0 then return -1
    $list = WinList()
    for $i = 1 to $list[0][0]
        if $list[$i][0] <> "" AND BitAnd(WinGetState($list[$i][1]),2) then
            $wpid = WinGetProcess($list[$i][0])
            if $wpid = $pid then return $list[$i][0]
        EndIf
    next
    return -1
endfunc
Источник AutoIt-Script.Ru
Ответить