Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как закрыть процесс, при условии если открыт другой? (http://forum.oszone.net/showthread.php?t=251644)

KOS9I4OK 17-01-2013 02:10 2068548

Как закрыть процесс, при условии если открыт другой?
 
Всем привет.
Подскажите как при помощи bat закрыть процесс, при условии если открыт другой?
Разжую вопрос.
Задача такая нужно что бы, если обнаружен процесс "notepad.exe", то завершить процесс "mspaint.exe",если нет такого процесса, то повторить данную команду -N количество раз.
Ну и если возможно, то по завершинии процесса "mspaint" закрыть батник.

P.S.
Извеняюсь если этот вопрос где то разбирался. поиск результатов не дал.
Зарание спасибо!

zion87 17-01-2013 06:24 2068585

Код:

@echo off

set process1=notepad.exe
set process2=mspaint.exe

:st
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 0 goto :st
taskkill /f /im %process2%
exit


KOS9I4OK 18-01-2013 05:24 2069269

Спасибо за поддержку. работает.
Еще вопроси как сделать так что бы запустилась сначала команда

@echo off

set process1=notepad.exe
set process2=mspaint.exe

:st
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 0 goto :st
taskkill /f /im %process2%

и что бы она висела в ожидании. ждала запуска "notepad" и при этом запустился к примеру "%programfiles%\winrar\winrar.exe"

zion87 18-01-2013 06:08 2069273

Код:

@echo off

set process1=notepad.exe
set process2=mspaint.exe
set process3="%programfiles%\winrar\winrar.exe"

start "" %process3%

:st
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 0 goto :st
taskkill /f /im %process2%


KOS9I4OK 18-01-2013 19:02 2069788

Спасибо. за ответы и за помощь.но возникла некая проблема. опишу суть правды что требуется.
команды работаю отлично, но проблемка вот в чем. нужно смотреть за процессом Firefox.exe, если он запущен то выключать другой процесс. к этому вопросов нет. Решено. но вот проблема в другом. Если переименовать файл в %programfile% скажем firefox.exe на firefox1.exe, то уже команда не работает, а пользователь может ее переименовать как хочет.Возможно ли как то сделать так что бы данная комадна закрывала второй процесс, не зависимо от названия этого Firefox-a ( при любом его названии?)

Iska 19-01-2013 03:57 2070090

KOS9I4OK, пожалуйста, ещё раз, с расстановкой и по-русски.

KOS9I4OK 19-01-2013 11:31 2070159

Хорошо. Вот что у меня сделанно

@echo off
title star game
@echo created by KOS9I4OK
rem CenterSelf
set FGcol=1100
rem ChangeColor %FGcol% 0
rem PrintBoxAt 12 31 3 20 2
rem ChangeColor 0 %FGcol%
rem Wait 1500
rem ShadeBoxAt 13 32 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 34 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 36 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 38 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 40 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 42 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 44 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 46 1 2 2
rem Wait 1000
rem ShadeBoxAt 13 48 1 2 2
rem ClearColor
rem Locate 25 1

set process1=firefox.exe
set process2=arma2OA.exe
set process3="Expansion\beta\arma2oa.exe" -beta=Expansion\beta;Expansion\beta\Expansion -nosplash -mod=@DayZ -connect=213.128.хх.хх -port=2302 -password=123456

start "" %process3%

:st
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 0 goto :st
taskkill /f /im %process2%
exit

Это все я запаковываю .exe файл и передаю игроку(клиенту).

Далее этот файл запускает игру. В игре как и в других есть возможность использовать читы.

Так вот чит включается по средством включенного браузера Firefox.exe. При данном коде работает все как надо. Если во время игры включили браузер, то закрылась игра.

Но если переименовать файл запуска браузера к примеру c firefox.exe в firefox123.exe, браузер запустится с именем процесса firefox123.exe и данный код не сработает.

Вот сам теперь вопрос. Возможно ли закрыть данный браузер (не зависимо от его названия) или вообще все браузеры на компьюторе?

Anonymоus 19-01-2013 17:09 2070390

KOS9I4OK, для оформления примеров кода используется bb-код code.
Насчёт закрытия окон браузера вне зависимости от имени процесса - можно использовать класс окна. Для этого нужна консольная версия утилиты NirCmd.
Код:

@Echo Off
:: Убиваем ie
nircmdc win close class "IEFrame"
:: Убиваем оперу
nircmdc win close class "OperaWindowClass"
:: Убиваем хром
nircmdc win close class "Chrome_WidgetWin_0"
:: Убиваем огнелис
nircmdc win close class "MozillaWindowClass"

Имейте в виду, что у chrome и firefox при нескольких открытых вкладках окно не закроется автоматически, а попросит подтверждения на закрытие. Для обхода этого вы можете использовать эмуляцию нажатия клавиш, посланных в соответствующее окно с помощью всё того же nircmdc.exe (читайте справочный файл).

Замечу, что принудительно закрывать пользователю браузер - плохое решение. У него там может быть открыта нужная информация. Стоит хотя бы предупреждение перед закрытием выдавать. А от читеров батник не спасёт - ведь отредактировать его проще простого.

KOS9I4OK 19-01-2013 17:38 2070412

Цитата:

Цитата Anonymоus
для оформления примеров кода используется bb-код code. »

понял. Извеняюсь. Спасибо за ответ.


Время: 19:55.

Время: 19:55.
© OSzone.net 2001-