| Код | uses tlhelp32; ... ListPr: TListView; //Создай четыре столбца ... function TForm.HexToStr(HexInt:Cardinal):string; var s:string; b:byte; i:integer; begin s:='00000000'; i:=8; repeat b:=HexInt mod 16; HexInt:=HexInt div 16; b:=b+$30; if b>$39 then b:=b+$7; s[i]:=chr(b); if HexInt=0 then i:=1; dec(i); until (i=0); Result:=s; end;
function TForm.ProcessPriToStr(nPri:Longint):string; var f:boolean; begin f:=true; case nPri of 0: Result:='Н/Д'; 1,4: Result:='Низкий'; 6: Result:='Ниже среднего (-2)'; 7: Result:='Ниже среднего (-1)'; 8: Result:='Средний'; 9: Result:='Выше среднего (+1)'; 10: Result:='Выше среднего (+2)'; 11: Result:='Ниже высокого (-2)'; 12: Result:='Ниже высокого (-1)'; 13: Result:='Высокий'; 14: Result:='Выше высокого (+1)'; 15: Result:='Выше высокого (+2) - Реального времени(для потоков)'; 24: Result:='Реального времени'; else f:=false; Result:='Приоритет N: '+IntToStr(nPri); end; if f then Result:=Result+' = '+IntToStr(nPri); end;
procedure TForm.LoadProcessID(); //Процессы var H :THandle; Process32:TProcessEntry32; next : bool; i:DWord; procedure AddItem(Name,nPID,nPri,nThreads:String); // Add ListPr var Item:TListItem; begin Item:=ListPr.Items.Add(); Item.Caption:=Name; Item.SubItems.Add(nPID); Item.SubItems.Add(nPri); Item.SubItems.Add(nThreads); end; begin Process32.dwSize:=SizeOf(TProcessEntry32); H:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); ListPr.Items.BeginUpdate; ListPr.Items.Clear; if Process32First(H,Process32) then begin i:=Process32.th32ProcessID; AddItem(Trim(StrPas(Process32.szExeFile)),IntToStr(i)+' ('+HexToStr(i)+')', ProcessPriToStr(Process32.pcPriClassBase),IntToStr(Process32.cntThreads)); Repeat Next:=Process32Next(H,Process32); if Next Then begin i:=Process32.th32ProcessID; AddItem(Trim(StrPas(Process32.szExeFile)),IntToStr(i)+' ('+HexToStr(i)+')', ProcessPriToStr(Process32.pcPriClassBase),IntToStr(Process32.cntThreads)); end; Until Not(Next); end; CloseHandle(H); ListPr.Items.EndUpdate; end; |
PS: Для завершения процесса ты должен открыть процесс hProcess = OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, false, Process32.th32ProcessID) а потом TerminateProcess(hProcess, -1). Конечно надо бы и всем окна процесса послать сообщение WM_CLOSE. И обязательно не забыть проверить процесс IsWOWProcess, а то мож это 16 битное приложение - его не много не так завершают
Удачи. |