// ProcessName wird im OnFormCreate Ereignis aus einer INI-Datei gelesen und zugewiesen.
procedure TForm1.CheckNSet() ;
type TPIDList =
Array of DWORD ;
var
ProcessList : TPIDList ;
dwReturn : DWORD;
PidProcesses : PDWORD;
PidWork : PDWORD;
BufferSize : Cardinal;
Needed : DWORD;
cntProcesses : Cardinal;
i, Prio : Cardinal;
Handle : THandle;
Path :
Array [0..300]
of Char ;
FoundProcess : boolean ;
begin
Needed := 0;
BufferSize := 1024;
GetMem(PidProcesses, BufferSize);
// make sure memory is allocated
if Assigned(PidProcesses)
then
begin
FoundProcess := false ;
try
// enumerate the processes
if EnumProcesses(PidProcesses, BufferSize, Needed)
then
begin
dwReturn := 0;
cntProcesses := Needed
div sizeof(DWORD) - 1;
PidWork := PidProcesses;
setlength(ProcessList, cntProcesses);
// walk the processes
if Debug.Checked
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: Hole Prozessliste ...') ;
for i := 0
to cntProcesses - 1
do
begin
ProcessList[i] := PidWork^;
// hier Processnamen suchen
Handle := OpenProcess(PROCESS_QUERY_INFORMATION
or PROCESS_VM_READ, True, ProcessList[i]);
GetModuleFileNameEx(
Handle,0,Path,300) ;
if Debug.Checked
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: Prozess ' + IntToStr(i) + '
: ' + Path) ;
if pos(ProcessName,Path) <> 0
then
begin
if Debug.Checked
then
begin
FoundProcess := true ;
Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
in Prozessliste gefunden') ;
Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + Path) ;
end ;
Prio := GetPriorityClass(
Handle) ;
if Prio = $00000080
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
mit Priorität = HOCH gefunden') ;
// HIGH_PRIORITY_CLASS
if Prio = $00000040
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
mit Priorität = LEERLAUF gefunden') ;
// IDLE_PRIORITY_CLASS
if Prio = $00000020
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
mit Priorität = NORMAL gefunden') ;
// NORMAL_PRIORITY_CLASS
if Prio = $00000100
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
mit Priorität = ECHTZEIT gefunden') ;
// REALTIME_PRIORITY_CLASS
// Wenn Prio nicht hoch, dann Prio auf HOCH setzen
if Prio <> $00000080
then
begin
if SetPriorityClass(
Handle,(HIGH_PRIORITY_CLASS )) = Null
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: Fehler beim setzen der Priorität!')
else Memo1.Lines.Add(DateTimeToStr(Now) + '
: Priorität gesetzt!')
end ;
end ;
Inc(PidWork);
end;
if not FoundProcess
then Memo1.Lines.Add(DateTimeToStr(Now) + '
: ' + ProcessName + '
nicht gefunden') ;
end
finally
// clean up no matter what happend
FreeMem(PidProcesses, BufferSize);
end;
end;
end ;