Нужно отсортировать выполнение процессов в системе,
т.е. поочередно выполнить несколько процессов, тем самым автоматизировать
некоторый " трудовой процесс" ? Этот код предоставляет такую возможность.
Вы создаете " кадр" существующих в системе процессов, находите в нем нужный
вам процесс по его ID и обрабатываете его сообщение.
unit PIDProcessing;
interfacefunction PIDExists(PID:Integer):boolean;
function RunProgram(ExeProgram:String):integer;
implementationuses 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 thenbegin
Result:=False;
Exit;
end;
Found:=False;
ProcessEntry.dwSize:=SizeOf(ProcessEntry);
Finding:=Process32First(hSnap,ProcessEntry);
{предоставляет информацию
о первом процессе в " кадре" }While Finding dobeginif 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< > '' thenif 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.
Статья Отсортировать выполнение процессов в системе раздела Программа и Интерфейс Процессы и Сервисы может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.