| Автор
| Сообщение |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
| Нужно написать прогу, кторая бы проверяла через небольшой интервал времени наличие одного процесса_1. И если этот процесс есть, то вырубать процесс_2, иначе врубать процесс_2 если он не включен. Линки приветствуются. |
|
| В начало |
|
 |
|
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
изначально вопрос в том, как найти определенныё процесс. или ещё лучше как найти определённый процесс зная только имя .exe. _________________ Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы |
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
ладно поискал и разобрался.
Другой вопрос как запустить процесс. _________________ Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы |
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
тоже в принципе ничего сложного.
вот так результативно я сегодня сам с собой пообщался _________________ Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 35
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
Если кому интересно. Служба перелопачивает все процессы в системе каждые пять секунд и если находит процесс1, то вырубает процесс2(если таковой имеется), а если не находит процесс1 то запускает процесс2(если такового нет):
| Код: |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
tlhelp32, ShellApi;
type
TService1 = class(TService)
procedure GetProcess;
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
Service1: TService1;
processID: array[1..127] of integer;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.GetProcess;
var
c: Cardinal;
p: TProcessEntry32;
x: integer;
yes, yea: boolean;
s, t: string;
k: TStartupInfo;
m: TProcessInformation;
begin
x:= 0;
c:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
p.dwSize:= sizeof(p);
yes:= false;
if Process32First(c, p) then
repeat
inc(x);
s:= ExtractFileName(p.szExeFile);
if s='NOTEPAD.EXE' then yes:= true;
processID[x]:= p.th32ProcessID;
until not Process32Next(c, p);
finally
if yes= true then
begin
if Process32First(c, p) then
repeat
inc(x);
t:= ExtractFileName(p.szExeFile);
if t='cmd.exe' then TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0), p.th32ProcessID), 0);
processID[x]:= p.th32ProcessID;
until not Process32Next(c, p);
end
else
begin
yea:= false;
if Process32First(c, p) then
repeat
inc(x);
t:= ExtractFileName(p.szExeFile);
if t='cmd.exe' then yea:= true;
processID[x]:= p.th32ProcessID;
until not Process32Next(c, p);
if yea=false then
begin
ShellExecute(0, nil, 'c:\WINDOWS\system32\cmd.exe', nil, nil, SW_SHOW);
end;
end;
end;
end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
SetTimer(0, 999, 5000, @TService1.GetProcess);
end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
KillTimer(0, 999);
end;
end.
|
Объективная критика и предложения приветствуются  |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Верно. Правда, под WinNT 4.0 не будет работать _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
| Цитата: | | Верно. Правда, под WinNT 4.0 не будет работать |
Предложи универсальный способ _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Универсального нет. Есть
| Код: |
uses psapi;
...
var
procs:array[0..$fff] of dword;
count:cardinal;
...
EnumProcesses(@procs, sizeof(procs), count)
|
Это будет работать на WinNT4/2000/XP, и не будет на Win9x/ME
Есть NtQuerySystemInformation. Это будет работать на WinNT3.x/4.x/2000/XP, и все равно не будет на Win9x/ME. Кстати, и либа ToolHelp32, и PSAPI на Вынь2000/ХР все равно вызывают эту самую NtQuerySystemInformation. Так что эта функция - единственный способ получить инфу о процессах (и не только) "из первых рук". Ну а для Win9x хорошо подойдет и описанный выше способ _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
 |
|
|
|
Цитата |
|
| Функций ToolHelp'а работают под NT/XP. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
| Цитата: | | Функций ToolHelp'а работают под NT/XP |
Нет, под NT не работают. Только под 2000/ХР _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Извините у меня не NT, а XP |
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
| Цитата: | | Верно. Правда, под WinNT 4.0 не будет работать |
надо же а я ожидал что меня с моим кодом разобьют вусмерть
я ведь до этого и понятия не имел о WinApi, а незадолго до этого вообще о делфи да и о программировании тоже |
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
как бы ещё сделать так чтобы не различались 'cmd.exe' и 'CMD.EXE'? _________________ Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы |
|
| В начало |
|
 |
 spoon
Энтузиаст

Возраст: 30
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
|
|
|
Цитата |
|
и вообще как то странно. в пятницу вроде всё работало. а после выходных не работает. служба не запускается _________________ Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы |
|
| В начало |
|
 |
|