Обходимо процеси системи

Євген Левшаков, mcsa.ru

Потрібно відсортувати виконання процесів у системі, тобто почергово виконати кілька процесів, тим самим автоматизувати деякий “трудовий процес”? Цей код надає таку можливість. Ви створюєте “Кадр” існуючих в системі процесів, знаходите в ньому потрібний вам процес по його ID і обробляєте його повідомлення.

unit PIDProcessing;
interface
function PIDExists(PID:Integer):boolean;
function RunProgram(ExeProgram:String):integer;
 
implementation
 
uses TLHelp32, Windows;
 
function PIDExists(PID:Integer):boolean; {Повертає true, якщо процес знайдений}
var hSnap:Cardinal;  / / Snapshot ("кадр") запущених процесів в системі
    ProcessEntry:TProcessEntry32; / / Інформація про процес
    Finding:LongBool; / / Повертає true, якщо перший процес скопійований в буфер, інакше false
    Found:Boolean; / / Повертає true, якщо в системі є запущені процеси
 begin
 hSnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);  {Створюємо "кадр" запущених процесів}
  if hSnap=0 then
    begin
    Result:=False;
    Exit;
    end;
  Found:=False;
  ProcessEntry.dwSize:=SizeOf(ProcessEntry); 
  Finding:=Process32First(hSnap,ProcessEntry); {Надає інформацію про перший процесі в "кадрі"}
  While Finding do
    begin
    if PID=ProcessEntry.th32ProcessID then Found:=True;  {Якщо необхідний процес знайдений, повертаємо true}
    Finding:=Process32Next(hSnap,ProcessEntry);  
 {Надає інформацію про наступний процесі в "кадрі"}
    end;
  CloseHandle(hSnap);
  Result:=Found;
end;
function RunProgram(EXEProgram:String):Boolean;  	{Повертає true, якщо процес системи виконаний}
var si:TStartupInfo;  	{Визначення властивостей головного вікна, створюваного додатка}
    pi:TProcessInformation; {Інформація про створений процесі і його головному потоці}
begin
  FillMemory(@si,sizeof(si),0);
  si.cb:=Sizeof(si);
  Result:=False;
  if EXEProgram<>'' then
   if CreateProcess(nil,PChar(EXEProgram),
    nil,nil,false,
        NORMAL_PRIORITY_CLASS,nil,nil,si,pi) then  {Створюємо процес}
     begin
 {До тих пір поки процес існує в "кадрі" обробляємо його повідомлення}
     While PIDExists(pi.dwProcessId) 
            do Application.ProcessMessages;
     CloseHandle(pi.hProcess);  {Закриваємо процес}
     CloseHandle(pi.hThread);  {Зупиняємо потік, породжений процесом}
          Result:=True;
        end;
end;
end.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*