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

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

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

Аватара пользователя
mrmerak
Сообщения: 441
Зарегистрирован: Пн авг 20, 2007 03:48

Сообщение mrmerak »

Народ, а кто может мой простенький vbs-скрипт переделать, чтобы он был универсальный для х32 и х64

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

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys("%{F4}")
WScript.Sleep 400
WshShell.Run "TOTALCMD.EXE"
TC 9.51 | Win10 1903
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Strek писал(а):У меня exe-шка на AutoIt, с таким кодом:
В выложенном примере из х64 ТС запускается х32 и наоборот. А зачем полные пути, если можно поместить файл в корень папки ТС и использовать относительные пути Run(@ScriptDir & "\TOTALCMD.EXE") для портативности?
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Skif_off писал(а):использовать относительные пути Run(@ScriptDir & "\TOTALCMD.EXE") для портативности?
Согласен. Просто пока не было нужды в портативности. Но за совет спасибо.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

mrmerak
%COMMANDER_EXE% ?

Добавлено спустя 54 минуты:

На JS будет так:

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

var
 s=new ActiveXObject('WScript.Shell'),
 t=s.ExpandEnvironmentStrings('%COMMANDER_EXE%');
s.SendKeys('%{F4}');
WScript.Sleep(2000);
s.Exec(t);
//s.Exec(t+' "'+WScript.Arguments(0)+'" "'+WScript.Arguments(1)+'"');
// это - если передавать скрипту %X "%Z%P" "%Z%T"
на бейсике примерно также, но я его дня три изучаю.

Добавлено спустя 18 минут:

или ещё короче:

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

with(new ActiveXObject('WScript.Shell')){
  sendKeys('%{F4}');
  WScript.Sleep(2000);
  exec(expandEnvironmentStrings('%COMMANDER_EXE%'));
  // exec(expandEnvironmentStrings('%COMMANDER_EXE%')+' "'+
  //  WScript.Arguments(0)+'" "'+WScript.Arguments(1)+'"');
}
Аватара пользователя
mrmerak
Сообщения: 441
Зарегистрирован: Пн авг 20, 2007 03:48

Сообщение mrmerak »

Serge Yolkin
работает!
TC 9.51 | Win10 1903
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

mrmerak
Знаю :)
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Strek
Нет ли проблем при перезапуске? Использую нескомпилированный скрипт (дополненный) - иногда нажимаю, ТС закрывается, но новая копия не открывается. Наверное, надо прикручивать проверку.
Аватара пользователя
mrmerak
Сообщения: 441
Зарегистрирован: Пн авг 20, 2007 03:48

Сообщение mrmerak »

Skif_off
я на TCIMG.exe rstart перешол
TC 9.51 | Win10 1903
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

mrmerak
Помимо перезапуска еще кое-какие действия повесил, TCIMG недостаточно (ну и мнение по ней пока не сформулировал).
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Skif_off писал(а):Strek
Нет ли проблем при перезапуске? Использую нескомпилированный скрипт (дополненный) - иногда нажимаю, ТС закрывается, но новая копия не открывается. Наверное, надо прикручивать проверку.
После посыла команды закрытия окна нужно делать задержку (0.2...1.0 сек) перед следующим запуском ТС

Попробуйте, может будет понадежнее:

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

' Папки разных TC, у меня папки разные
TC64 = "E:\totalcmd64\TOTALCMD64.EXE"
TC86 = "E:\totalcmd86\Totalcmd.exe"

Set WSS = CreateObject("Wscript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcess86 = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & FSO.GetFileName(TC86) & "'")
Set colProcess64 = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & FSO.GetFileName(TC64) & "'")

' MsgBox "TC x86 = " & colProcess86.Count & vbLF & "TC x64 = " & colProcess64.Count, 64, "Info"

' Если есть запущенные процессы TC x86, то все их закрываем (а не убиваем)
' и запускаем один новый процесс TC x86
Restart TC86, colProcess86
' Если есть запущенные процессы TC x64, то все их закрываем (а не убиваем)
' и запускаем один новый процесс TC x64
Restart TC64, colProcess64
WScript.Quit

Sub Restart(ts, colProcessList)
	If colProcessList.Count <> 0 Then
		For Each objProcess in colProcessList
			WScript.Sleep 100
			WSS.Run "taskkill /PID " & objProcess.ProcessID, 0
		Next 
		WScript.Sleep 400
		WSS.Run "" & ts & ""
		WScript.Sleep 400
	End If
End Sub
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):

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

Если есть запущенные процессы TC x-/-, то все их закрываем
Сомнительная задачка. К чему она?
gora писал(а):

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

Where Name = '" & FSO.GetFileName(TC86) & "'"
И если exe какой-то копии переименован, тады чего?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher писал(а):
gora писал(а):

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

Если есть запущенные процессы TC x-/-, то все их закрываем
Сомнительная задачка. К чему она?
Это цитата не из меня. У меня там очень точно, мухи отдельно, котлеты отдельно. Постарайтесь цитировать без искажений о обобщений.
Flasher писал(а):
gora писал(а):

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

Where Name = '" & FSO.GetFileName(TC86) & "'"
И если exe какой-то копии переименован, тады чего?
Тут важно читать следующее:
gora писал(а):Папки разных TC, у меня папки разные
1 И ни какие общие варианты я не рассматривал.
2 Я отвечал Skif_off, который обсуждал код из поста, где имена и пути заданы абсолютными. :)
Win7 SP1 Ultimate x64, TC8.52a x64
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

gora писал(а):После посыла команды закрытия окна нужно делать задержку (0.2...1.0 сек) перед следующим запуском ТС
Почти сразу добавил Sleep(500).
gora писал(а):Попробуйте, может будет понадежнее
taskkill /PID - не очень корректно :)
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Skif_off писал(а):taskkill /PID - не очень корректно
Чем?
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):Это цитата не из меня. У меня там очень точно, мухи отдельно, котлеты отдельно. Постарайтесь цитировать без искажений о обобщений.
Раз про точность заговорили, "не из меня" или "не из моего кода"? "о обобщений" - это как?
В коде две строки. Мне их дважды предлагается повторить? Или лаконичность тут отменили?
gora писал(а):Тут важно читать следующее:
Это я прочёл сразу, суть моего вопроса от этого не пострадала.
gora писал(а):1 И ни какие общие варианты я не рассматривал.
Да ну? А перебор в цикле с завершением всех запущенных процессов с тем же именем?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить