Войти

Показать полную графическую версию : [решено] Завершение программы из командной строки


Severny
23-09-2009, 14:00
Здравствуйте.
Нужно из батника завершать программу.
tskill <название процесса> работает, но не завершает корректно программу.
Т.е. сама программа при обычном завершении формирует лог, а при убийстве процесса этого не делает.
Спасибо.

Petya V4sechkin
23-09-2009, 14:31
Severny, вместо tskill taskkill, причем без опции /F
taskkill /IM notepad.exe

Severny
23-09-2009, 15:37
Petya V4sechkin,
Спасибо. Блокнот завершается отлично.
Мое приложение нет (
Подсказали скрипт, что-то мне не удается связать (
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "ics.exe"
WScript.Sleep 1000
WshShell.SendKeys "q"
WScript.Sleep 1000
WshShell.SendKeys "~"

Petya V4sechkin
23-09-2009, 15:50
Severny, как-то так:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "Internet Casino Cash"
WshShell.SendKeys "%{F4}"

Severny
23-09-2009, 15:57
Petya V4sechkin,
Ну я же знал, что найду ответ на ЭТОМ форуме )

Severny
23-09-2009, 16:58
Один момент.
Если вдруг программа закрыта, то выскакивает окошко завершения работы (ну Alt+F4).
Нельзя ли какой-то параметр if, чтобы Alt-F4 не выполнялся, если не обнаруживается работающая программа.

Petya V4sechkin
23-09-2009, 17:03
Set WshShell = WScript.CreateObject("WScript.Shell")
If WshShell.AppActivate("Internet Casino Cash") Then
WshShell.SendKeys "%{F4}"
End If

Severny
23-09-2009, 17:14
Дело мастера боится

megaloman
23-09-2009, 21:30
Вот скрипт, который убивает процесс. Он не связан с посылкой в буфер никаких имитаций нажатия клавиш. Если запущено несколько одинаковых процессов, убивает все. Для примера взял far.exe, который переспрашивает, надо ли завершать программу или нет. Скрипт убивает его без вопросов. Хоть десять штук за раз. WhatKill = "Far.exe" ' Что хотим убить. Если запущено несколько экземпляров, убьём всё

Set WMI = GetObject("winMgmts:")
iSQL = "Select * From Win32_Process Where Name=""" + WhatKill + """"
Set Proc = WMI.ExecQuery(iSQL)

For Each iProc In Proc
iProc.Terminate
Next

Severny
23-09-2009, 21:32
Спасибо, но..
убить я и tskill могу, а надо завершить. При убийстве процесса программа не делает нужного лога, который она делает при завершении.

megaloman
23-09-2009, 22:52
Извините, я невнимательно вчитался в проблему :tomato2:

FragMaster
12-04-2013, 09:40
Приведенные в теме скрипты срабатывают (по крайней мере у меня) только тогда, когда Аутлук НЕ свернут в трей (где часы).
Можно ли как-ньть изменить данный скрипт, чтобы он закрывал Аутлук, свернутый в трей?

Такой скрипт тоже срабатывают только когда АутЛук НЕ свернут в трей:
Set objWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks

'нужно знать название окна
If colTasks.Exists("Outlook") Then
colTasks("Outlook").Close
End If

objWord.Quit

PS: WIn 7x64 sp1 Outlook 2010

Iska
12-04-2013, 13:20
FragMaster, для Microsoft Outlook есть правильный способ:
On Error Resume Next
GetObject(, "Outlook.Application").Quit

Сработает ли для «Microsoft Outlook 2010» — не знаю, проверьте и отпишитесь.

Iska
21-04-2013, 20:50
Georgio, Вы на дату процитированного Вами поста обратили внимание?




© OSzone.net 2001-2012