Отсортировать выполнение процессов в системе
Автор: Евгений Левшаков
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. |
Далее: Передать строки, картинки (streams) между процессами »»