Windows Script Host

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

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

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

HEXFIX писал(а):В коде скрипта по ссылке: "Requirements: Script Helper ActiveX for TC by Volniy"
А, ну да. Забыл. Там без этого трудновато. Хотя скрипт сам по себе даёт более универсальный вариант перезапуска. Сделать без Хелпера скрипт, аналогичный примеру в DemoScripts - не проблема. Надо?
HEXFIX
Сообщения: 177
Зарегистрирован: Пт июн 25, 2010 19:54
Откуда: Калининград

Сообщение HEXFIX »

Flasher
Надо?
Если он будет работать при запуске тотала с флэшки, то да, надо! :)

Добавлено спустя 2 минуты 50 секунд:

Ну и чтоб на 64-бит работал при этом.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Что-то наподобие этого:

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

With CreateObject("WScript.Shell")
TCExe = .ExpandEnvironmentStrings("%Commander_Path%\totalcmd.exe")
.SendKeys "%{F4}"
WScript.Sleep 50
.Exec(TCExe)
End With
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

Вопрос к знатокам (JScript): а можно ли убить зависшую функцию? Не цикл. Ну, например:

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

function MyBedniyFunction(){
  objNeZnayuGde.GetNeZnayuChto();
}
вызывается с кнопки (hta), в 99 случаях работает прекрасно, а в сотом - виснет насмерть. Сообщений об ошибке нет, поэтому try не помогает. Только процесс убивать (mshta) вместе с окошком. Вот бы еще такую функцию, чтобы прерывала предыдущую... С кнопки там, или по таймауту...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Serge Yolkin
Какой-то аналог WScript.Timeout должен быть.

All
Никто не знает, почему имитация Esc (SendKeys/SendKeyStroke) при задействовании в файловой панели TC впадает в тяжёлый ступор (цикл)?
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Подскажите пожалуйста как в скрипте vbs использовать функции другого скрипта, где прописаны только функции
В AkelPad есть функция AkelPad.Include("Functions.vbs")
В au3 есть #include <Excel.au3>
А как в vbs?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Andrey_A писал(а):как в скрипте vbs использовать функции другого скрипта, где прописаны только функции

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

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Execute FSO.OpenTextFile("C:\Путь\IncludeFile.vbs").ReadAll
...
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Спасибо, а я через eval(FSO.Open...) пытался
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Подскажите, пожалуйста такую вещь

Есть текст, как можно создать коллекцию, объктом CreateObject("Scripting.Dictionary") , состоящую из отдельных строк

я пытался следующим образом

1. сначала делал массив
2. затем каждое значение присаивал

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

  
  ArBasic = Split(Text, vbNewLine)

  Set oDict = CreateObject("Scripting.Dictionary")
  oDict.RemoveAll
  For Each Item In ArBasic
  If Len(Item) > 0 Then
    If Not bDict.Exists(Item) Then bDict.Add Item, Item
  End If
  Next
есть ли что-нибудь покороче.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Знать бы ещё, что такое Text.

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

Set FSO = CreateObject("Scripting.FileSystemObject")
Text = FSO.OpenTextFile(WScript.Arguments(0), 1).ReadAll
Set oDict = CreateObject("Scripting.Dictionary")
For Each i in Split(Text, vbNewLine)
  If i > vbNullString Then D.Add i, ""
Next
Andrey_A писал(а):есть ли что-нибудь покороче.
В каком смысле "покороче"? Число строк можно сократить, если писать массив в цикл без создания переменной. Куда тут короче?
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Flasher
Спасибо, там наверно не
If i > vbNullString Then D.Add i, ""
а
If i > vbNullString Then oDict.Add i, ""
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Да, я со своего скрипта скопипастил, не обратил внимания.
Аватара пользователя
ApceH
Сообщения: 316
Зарегистрирован: Пт апр 08, 2011 17:58
Откуда: Димитровград

Сообщение ApceH »

У меня есть скрипт для убивания процессов всех программ, лежащих в указанной папке (нужно при (де)инсталляции пака):

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

strComputer = "."
strNamespace = "Root\CIMV2"
Set objService = GetObject("WinMgmts:\\" & strComputer & "\" & strNamespace)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colProcesses = objService.ExecQuery("SELECT * FROM Win32_Process WHERE ExecutablePath Like '" & Replace(WScript.Arguments(0),"\","\\") & "%'")
For Each objProcess in colProcesses
  objProcess.Terminate()
Next
В первом аргументе передаётся путь.
Вполне работает... Но убивает процессы только текущего пользователя. Если кто-то ещё вошёл в систему и запустил какую-нибудь прогу — тот процесс не убъётся...
Как решить задачу?
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

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

ApceH писал(а):Как решить задачу?
Запускать скрипт от админа (в Vista/7 - еще и с повышением прав)
Аватара пользователя
ApceH
Сообщения: 316
Зарегистрирован: Пт апр 08, 2011 17:58
Откуда: Димитровград

Сообщение ApceH »

Serge Yolkin
Нет.
Сейчас смотрю, выдаются-то все процессы.
Но Terminate не срабатывает. Причем НЕ из-за прав, а, как я подозреваю, из-за того, что сеанс пользователя приостановлен...
Последний раз редактировалось ApceH Чт сен 15, 2011 23:07, всего редактировалось 1 раз.
Ответить