Страница 6 из 12

Добавлено: Пт окт 18, 2013 15:05
mrmerak
Народ, а кто может мой простенький vbs-скрипт переделать, чтобы он был универсальный для х32 и х64

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

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys("%{F4}")
WScript.Sleep 400
WshShell.Run "TOTALCMD.EXE"

Добавлено: Пт окт 18, 2013 19:24
Skif_off
Strek писал(а):У меня exe-шка на AutoIt, с таким кодом:
В выложенном примере из х64 ТС запускается х32 и наоборот. А зачем полные пути, если можно поместить файл в корень папки ТС и использовать относительные пути Run(@ScriptDir & "\TOTALCMD.EXE") для портативности?

Добавлено: Пт окт 18, 2013 20:04
Strek
Skif_off писал(а):использовать относительные пути Run(@ScriptDir & "\TOTALCMD.EXE") для портативности?
Согласен. Просто пока не было нужды в портативности. Но за совет спасибо.

Добавлено: Пт окт 18, 2013 22:26
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)+'"');
}

Добавлено: Сб окт 19, 2013 10:35
mrmerak
Serge Yolkin
работает!

Добавлено: Сб окт 19, 2013 17:55
Serge Yolkin
mrmerak
Знаю :)

Добавлено: Вс июл 13, 2014 14:44
Skif_off
Strek
Нет ли проблем при перезапуске? Использую нескомпилированный скрипт (дополненный) - иногда нажимаю, ТС закрывается, но новая копия не открывается. Наверное, надо прикручивать проверку.

Добавлено: Вс июл 13, 2014 15:22
mrmerak
Skif_off
я на TCIMG.exe rstart перешол

Добавлено: Вс июл 13, 2014 17:05
Skif_off
mrmerak
Помимо перезапуска еще кое-какие действия повесил, TCIMG недостаточно (ну и мнение по ней пока не сформулировал).

Добавлено: Чт июл 17, 2014 07:51
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

Добавлено: Чт июл 17, 2014 14:12
Flasher
gora писал(а):

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

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

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

Where Name = '" & FSO.GetFileName(TC86) & "'"
И если exe какой-то копии переименован, тады чего?

Добавлено: Чт июл 17, 2014 17:19
gora
Flasher писал(а):
gora писал(а):

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

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

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

Where Name = '" & FSO.GetFileName(TC86) & "'"
И если exe какой-то копии переименован, тады чего?
Тут важно читать следующее:
gora писал(а):Папки разных TC, у меня папки разные
1 И ни какие общие варианты я не рассматривал.
2 Я отвечал Skif_off, который обсуждал код из поста, где имена и пути заданы абсолютными. :)

Добавлено: Чт июл 17, 2014 18:57
Skif_off
gora писал(а):После посыла команды закрытия окна нужно делать задержку (0.2...1.0 сек) перед следующим запуском ТС
Почти сразу добавил Sleep(500).
gora писал(а):Попробуйте, может будет понадежнее
taskkill /PID - не очень корректно :)

Добавлено: Чт июл 17, 2014 19:42
gora
Skif_off писал(а):taskkill /PID - не очень корректно
Чем?

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