Отсортировать выполнение процессов в системе

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Евгений Левшаков

WEB сайт: 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.

{/codecitation}

Добавить комментарий