Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Windows Script Host
Goto page Previous  1, 2, 3 ... 19, 20, 21 ... 25, 26, 27  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Sep 15, 2011 23:04    Post subject: Reply with quote

ApceH wrote:
Code:
Set WshShell = WScript.CreateObject("WScript.Shell")
- это лишнее.

А в другом сеансе программы точно из этой папки запускаются?
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Thu Sep 15, 2011 23:17    Post subject: Reply with quote

Flasher
Да. Сейчас вывел все процессы с их путями. Перечисление срабатывает. Отличие лишь одно:
objProcess.GetOwner возвращает разных пользователей. То есть всё правильно.
В крайнем случае я возьму objProcess.ProcessId и просто убью по пиду. Сейчас попробую. Но почему же Terminate не срабатывает! Crying or Very sad
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Thu Sep 15, 2011 23:31    Post subject: Reply with quote

Что-то никак не могу понажимать кнопки в ИГП. Открываю, например, через TCMC
Code:
Dim WSH, TCS
Set WSH = CreateObject("WScript.Shell")
Set TCS = WScript.CreateObject("TCScript.Helper")
WSH.Run """" & WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\Utils\TCMultipleCommands\TCMC.exe") & """ 50 CM2400" & """ """"", 1, True
Wscript.Sleep 1000
' варианты:
'WSH.SendKeys "qwe"
TCS.SendKeystroke "qwe"

Отправка клавиш происходит уже в сам TC после ручного закрывания диалога. До этого окно не подаёт признаков жизни.
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Thu Sep 15, 2011 23:37    Post subject: Reply with quote

Сделал убийство процессов через костыль:
Code:
Set objService = GetObject("WinMgmts:\\.\Root\CIMV2")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colProcesses = objService.ExecQuery("SELECT * FROM Win32_Process WHERE ExecutablePath Like '" & Replace(WScript.Arguments(0),"\","\\") & "%'")
PIDs = ""
For Each objProcess in colProcesses
  PIDs = PIDs & " /PID " & objProcess.ProcessId
Next
WshShell.Run "TASKKILL /F" & PIDS, 0, False

Если кто подскажет, как без запуска сторонних программ, будет совсем хорошо!
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Sep 15, 2011 23:55    Post subject: Reply with quote

ApceH
Можно использовать tskill c ключом /A для всех сеансов. Т.е.:
Code:
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each p in WMI.ExecQuery("SELECT * FROM Win32_Process WHERE ExecutablePath Like '" & Replace(WScript.Arguments(0),"\","\\") & "%'")
  CreateObject("WScript.Shell").Run "tskill " & p.ProcessID & " /A", 0
Next


Rodny
Code:
With CreateObject("WScript.Shell")
  .Exec("%COMMANDER_PATH%\Utils\TCMultipleCommands\TCMC.exe CM2400")
'  .Run """" & .ExpandEnvironmentStrings("%COMMANDER_PATH%\Utils\TCMultipleCommands\TCMC.exe") & """ CM2400", 1
  Wscript.Sleep 40
  .SendKeys "qwe"
End With
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Fri Sep 16, 2011 22:16    Post subject: Reply with quote

Нет Crying or Very sad Приведённые в двух постах выше скрипты для убийства процессов из папки не работают в общем случае.
В Win6+ нет tskill, во-первых. Мой скрипт работает только в Win6+.
В XP совсем другая проблема, которая меня ввела в ступор совсем.
Там свойства ExecutablePath (и даже CommandLine) равны пустой строке, если речь идёт о процессе в другом сеансе... Поэтому хоть tskill, хоть taskkill применить не удастся!

Единственный выход вижу: насильно завершить все сеансы, кроме текущего...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Sep 16, 2011 22:56    Post subject: Reply with quote

ApceH wrote:
В Win6+ нет tskill, во-первых.
А поставить?
Если не работает, можно перед /A указать /server:<Имя компа>
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Fri Sep 16, 2011 23:00    Post subject: Reply with quote

Flasher
Уже без разницы, чем убивать, если нельзя получить список процессов, запущенных из папки, в XP...
Поставить tskill? Зачем????

Я понимаю, что запрограммировать это на винапи за полчаса можно. Но не писать же новую программу для каждой появившейся задачи(((
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Fri Sep 16, 2011 23:15    Post subject: Reply with quote

Flasher
Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Sep 16, 2011 23:21    Post subject: Reply with quote

ApceH wrote:
Уже без разницы, чем убивать, если нельзя получить список процессов
Т.е. как нельзя? А в чём проблема? (я просто не хочу создавать акк для тестов.)

Можно, конечно, убивать по имени, но тогда будут убиваться одноимённые процессы не только из этой папки.
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Fri Sep 16, 2011 23:29    Post subject: Reply with quote

ApceH wrote:
В XP совсем другая проблема, которая меня ввела в ступор совсем.
Там свойства ExecutablePath (и даже CommandLine) равны пустой строке, если речь идёт о процессе в другом сеансе... Поэтому хоть tskill, хоть taskkill применить не удастся!

Короче, сделал просто вот так пока:
Code:
Set objService = GetObject("WinMgmts:")
Set WshShell = WScript.CreateObject("WScript.Shell")
XP = (Left(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"),1) = "5")
If XP Then
  Set colSessions = objService.ExecQuery("Select * from Win32_LogonSession Where LogonType = 2")    
  If colSessions.Count > 1 Then
    WScript.Quit 1
  End If
End If
Set colProcesses = objService.ExecQuery("SELECT * FROM Win32_Process WHERE ExecutablePath Like '" & Replace(WScript.Arguments(0),"\","\\") & "%'")
If XP Then
  For Each objProcess in colProcesses
    WshShell.Run "TSKILL /A " & objProcess.ProcessId, 0, False
  Next
Else
  For Each objProcess in colProcesses
    WshShell.Run "TASKKILL /F /PID " & objProcess.ProcessId, 0, False
  Next
End If
WScript.Quit 0
Уже в вызывающем процесс (в NSIS-скрипте) проверяю возвращаемый код и, если =1, говорю пользователю завершить все сеансы кроме админовского...
Кстати, обнаружил интересность... Если завершить сеанс через диспетчер задач, то он не полностью завершается colSessions.Count будет всё ещё > 1... Только настоящий выход прокатит.

Ну будет время напишу, конечно, утилку, раз дохлый номер с WSH/WMI...
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Mon Sep 19, 2011 18:11    Post subject: Reply with quote

Подскажите как правильно передать адрес интернета с параметрами

Code:
CreateObject("WScript.Shell").Run "http://translate.google.com/#auto|ru|\привет"


пробовал и с пробелам и с чёрточками, не получается - переходит к сайту, выдаёт ошибку, параметр соответственно не передаёт
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Mon Sep 19, 2011 18:18    Post subject: Reply with quote

Andrey_A
А у меня открывается так:
Code:
CreateObject("WScript.Shell").Run "http://translate.google.com/#ru|en|привет"

В чём проблема-то?
_________________
kIT Programs PowerPack, kIT Universal Presets | Есть только одна истинная вера: чёрная магия...
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Mon Sep 19, 2011 18:22    Post subject: Reply with quote

У меня выдаёт ошибку
Code:
Сценарий:   C:\TC Image\AkelFiles\Plugs\Scripts\Test_001.vbs
Строка:   1
Символ:   1
Ошибка:   Не удается найти указанный файл.
Код:   80070002
Источник:    (null)


в скрипте одна эта строка
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Mon Sep 19, 2011 18:27    Post subject: Reply with quote

Andrey_A
Понял проблему. Преобразуй в ANSI-кодировку. Или в юникод UCS-2 Little Endian.
_________________
kIT Programs PowerPack, kIT Universal Presets | Есть только одна истинная вера: чёрная магия...
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 19, 20, 21 ... 25, 26, 27  Next
Page 20 of 27

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group