Ich habe eine Routine:
Delphi-Quellcode:
function TProcess.SetPriorityClass: DWORD;
var
hProcess: THandle;
begin
Result := 0;
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, FProcID);
if hProcess <> 0 then
begin
Result := Windows.GetPriorityClass(hProcess);
CloseHandle(hProcess);
end
else
raise TMpuProcToolException.Create(SysErrorMessage(GetLastError), GetLastError);
end;
Diese wirft im Fehlerfall eine
Exception. Schön und gut, das tut sie auch. Nur leider wird diese Funktion in einer Schleife aufgerufen und wenn die
Exception geworfen wird, fliege ich ganz aus der Schleife raus:
Delphi-Quellcode:
ProcList := TProcessList.Create(False);
try
try
ProcList.EnableDebugPrivileges;
ProcList.EnumProcesses;
for i := 0 to ProcList.Count - 1 do
begin
s := ExtractFilename(ProcList.Items[i].ModuleFilename) + #9;
s := s + Format('0x%.8X', [ProcList.Items[i].ProcessPriority]);
Writeln(IntToStr(ProcList.Items[i].ProcID) + #9 + s);
end;
except
on E: TMpuProcToolException do
Writeln(E.Message);
end;
finally
ProcList.Free;
end;
Die Schleife steckt in der Methode
ProcList.EnumProcesses:
Delphi-Quellcode:
procedure TProcessList.EnumProcesses;
var
PIDList : array[0..1024] of DWORD;
Needed : DWORD;
i : Integer;
Process : TProcess;
begin
if Psapi.EnumProcesses(@PIDList, sizeof(PIDList), Needed) then
begin
for i := 0 to Needed div sizeof(DWORD) - 1 do
begin
Process := TProcess.Create(PIDList[i]);
FProcessList.Add(Process);
end;
end
else
raise TMpuProcToolException.Create(SysErrorMessage(GetLastError), GetLastError);
end;
Und das ist natürlich blöd, dass ich bei der Exceptions aus der Schleife fliege.
Was kann man da am Design machen, dass ich nicht aus der Schleife fliege, aber trotzdem irgendwie an die
Exception-Nachricht drankomme, um sie anzeigen zu können?