Нужно отсортировать выполнение процессов в системе,
т.е. поочередно выполнить несколько процессов, тем самым автоматизировать
некоторый " трудовой процесс" ? Этот код предоставляет такую возможность.
Вы создаете " кадр" существующих в системе процессов, находите в нем нужный
вам процесс по его 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 и предназначен для сортировки выполнения процессов в системе. Цель - автоматизация некоторых шагов "процесса работы".
Вот что код делает:
Он создает снимок всех запущенных процессов в системе с помощью функции CreateToolHelp32Snapshot из единицы TLHelp32.
Затем он итерирует этот снимок и проверяет, если существует процесс с заданным ID (PID).
Если он находит желаемый процесс, он устанавливает флаг Found в True.
Функция RunProgram используется для запуска нового программы (или процесса) путем предоставления ее исполняемого имени как строки.
Он создает новый процесс с помощью функции CreateProcess и ожидает, пока он не будет выполнен.
Код можно улучшить в нескольких способах:
Обработка ошибок: Код не обрабатывает ошибки должным образом. Например, если CreateToolHelp32Snapshot fails, он просто возвращает код ошибки без предоставления какой-либо информации о том, что пошло не так.
Организация кода: Код quite long и может быть организован в отдельные процедуры или функции для улучшения его читаемости.
Выполнение: Код итерирует все процессы в системе для каждого вызова PIDExists, что может быть неэффективно, если есть много запущенных процессов.
В этом примере я извлек логику получения информации о процессе в отдельную функцию GetProcessInfo, что делает код более читаемым и поддерживаемым. Я также улучшил обработку ошибок, проверяя возвращаемое значение CreateProcess и предоставляя значимый сообщение об ошибке, если оно fails.
Отсортировать выполнение процессов в системе - это возможность автоматизации некоторых трудовых процессов, создавая 'кадр' существующих процессов и обрабатывая сообщения выбранного процесса по его ID.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.