Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Процессы
На страницу 1, 2  След.

Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеЧт, 05-Май-2005 7:48    Заголовок сообщения: Процессы
Цитата

Нужно написать прогу, кторая бы проверяла через небольшой интервал времени наличие одного процесса_1. И если этот процесс есть, то вырубать процесс_2, иначе врубать процесс_2 если он не включен. Линки приветствуются.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеЧт, 05-Май-2005 8:53 
Цитата

изначально вопрос в том, как найти определенныё процесс. или ещё лучше как найти определённый процесс зная только имя .exe.
_________________
Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы:)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеЧт, 05-Май-2005 13:51 
Цитата

ладно поискал и разобрался.
Другой вопрос как запустить процесс.

_________________
Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы:)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеЧт, 05-Май-2005 14:11 
Цитата

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

_________________
Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы:)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж 13-ый
Администратор


Возраст: 35
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеЧт, 05-Май-2005 14:33 
Цитата

зато мы теперь знаем к кому если что обращаться :)
_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеПт, 06-Май-2005 13:45 
Цитата

Если кому интересно. Служба перелопачивает все процессы в системе каждые пять секунд и если находит процесс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.

Объективная критика и предложения приветствуются Wink
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеПт, 06-Май-2005 21:43 
Цитата

Верно. Правда, под WinNT 4.0 не будет работать
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСб, 07-Май-2005 3:43 
Цитата

Цитата:
Верно. Правда, под WinNT 4.0 не будет работать

Предложи универсальный способ

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСб, 07-Май-2005 20:39 
Цитата

Универсального нет. Есть
Код:

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 хорошо подойдет и описанный выше способ

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Almaz
Гость







СообщениеПн, 09-Май-2005 10:32 
Цитата

Функций ToolHelp'а работают под NT/XP.
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеПн, 09-Май-2005 10:55 
Цитата

Цитата:
Функций ToolHelp'а работают под NT/XP

Нет, под NT не работают. Только под 2000/ХР

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Almaz
Гость







СообщениеПн, 09-Май-2005 20:46 
Цитата

Извините у меня не NT, а XP
В начало
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеВт, 10-Май-2005 6:56 
Цитата

Цитата:
Верно. Правда, под WinNT 4.0 не будет работать

надо же:) а я ожидал что меня с моим кодом разобьют вусмерть:)
я ведь до этого и понятия не имел о WinApi, а незадолго до этого вообще о делфи да и о программировании тоже:)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеВт, 10-Май-2005 9:16 
Цитата

как бы ещё сделать так чтобы не различались 'cmd.exe' и 'CMD.EXE'?
_________________
Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы:)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж spoon
Энтузиаст


Возраст: 30
Знак зодиака: Телец
Зарегистрирован: 10.03.2005
Сообщения: 337
Откуда: Архипелаг ГУЛАГ
СообщениеВт, 10-Май-2005 11:54 
Цитата

и вообще как то странно. в пятницу вроде всё работало. а после выходных не работает. служба не запускается:(
_________________
Верь людям - только так можно узнать кому стоит верить. (c) spoon
Не можешь держать язык за зубами, держи языком зубы:)
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 2 На страницу 1, 2  След.
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100