Einzelnen Beitrag anzeigen

Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#1

Priorität einer Anwendung beim Start erhöhen

  Alt 6. Jan 2008, 11:27
Hallöchen,

ich möchte eine Anwendung, die ich mit meinem Programm starte, auf die Priorität "höher als normal" setzen. Dazu verwende ich folgenden Code:

Delphi-Quellcode:
//ProgrammStarten benutze ich im Allgemeinen, um Programme aufzurufen; darum ist der Code freier gehalten.
procedure ProgrammStarten(Dateiname,Dateipfad,Parameter:string;Threadzahl:integer;
  PriorClass,Prioritaet:integer);
var Prozesse: array of TStart;
    i,x:integer;
    PClass:Cardinal;
    Prior:TThreadPriority;
begin
  Prior:=tpNormal;
  PClass:=Normal_Priority_Class;
  case Prioritaet of
    -3: Prior:=tpIdle;
    -2: Prior:=tpLowest;
    -1: Prior:=tpLower;
     0: Prior:=tpNormal;
     1: Prior:=tpHigher;
     2: Prior:=tpHighest;
     3: Prior:=tpTimeCritical;
  end;

  case PriorClass of
    -1: PClass:=Idle_Priority_Class;
     0: PClass:=Normal_Priority_Class;
     1: PClass:=High_Priority_Class;
     2: PClass:=Realtime_Priority_Class;
  end;

  if Threadzahl<2 then Threadzahl:=2; //gibt sonst Fehler ;-)
  SetLength(Prozesse,Threadzahl);
  SetPriorityClass(GetCurrentProcess(), PClass);

  for i:=0 to Threadzahl-1 do
  begin
    Prozesse[i]:=TStart.Create(true); //"TStart" siehe unten
    uStart.Pfad:=Dateipfad;
    uStart.Datei:=Dateiname;
    uStart.Parameter:=Parameter;
    Prozesse[i].Priority:=Prior;
    Prozesse[i].Resume;

    if i=Threadzahl-1 then
      for x:=0 to Threadzahl-1 do
        Prozesse[i].Terminate;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Anwendung,Ziel,Parameter:string;
begin
  Anwendung:='Dingsbums.exe';
  Ziel:='C:\';
  Parameter:='';
  ProgrammStarten(Anwendung,Ziel,Parameter,1,1,1);
end;
TStart beihaltet dies als implementation:
Delphi-Quellcode:
procedure TStart.Execute;
begin
  ChDir(Pfad);
  ShellExecute(handle,'open',PChar(Datei),PChar(Parameter),NIL,SW_SHOWNORMAL);
end;

constructor TStart.Create(CreateSuspended:boolean);
begin
  inherited Create(CreateSuspended);
  Priority:=tpHighest;
  FreeOnTerminate:=True;
end;
Leider wird die Priorität keinesfalls verändert; jedenfalls ist das nicht im TaskManager ersichtlich. (Das Program wird ansonsten richtig gestartet.)

Habt ihr vielleicht eine Idee, was da falsch läuft?

Liebe Grüße,
Aike
Achim
  Mit Zitat antworten Zitat