Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
|
Re: Process Priorität setzen - als Variable...
20. Mär 2004, 18:09
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Style:=csDropDownList;
ComboBox1.Items.AddObject('Idle Priorität',TObject(IDLE_PRIORITY_CLASS));
ComboBox1.Items.AddObject('Normale Priorität',TObject(NORMAL_PRIORITY_CLASS));
ComboBox1.Items.AddObject('High Priorität',TObject(HIGH_PRIORITY_CLASS));
// Normal als Default auswählen
ComboBox1.ItemIndex := 1;
// die Ereignisroutine aufrufen, passiert bei Zuweisung an ItemIndex nicht
ComboBox1Change(nil);
end;
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD;const AdwProcessPriority : DWORD): Longword;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if not CreateProcess(nil,
@Filename[1],
nil,
nil,
False,
CREATE_NEW_CONSOLE or
AdwProcessPriority,
nil,
nil,
StartupInfo,
ProcessInfo)
then
Result := WAIT_FAILED
else
begin
if wait = FALSE then
begin
if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
exit;
end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
end;
if ProcessInfo.hProcess <> 0 then
CloseHandle(ProcessInfo.hProcess);
if ProcessInfo.hThread <> 0 then
CloseHandle(ProcessInfo.hThread);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
// Mit einer Liste wird's etwas übersichtlicher
const
_asPriorities : array [0..2] of String = ('IDLE ON','NORMAL ON','HIGH ON');
begin
Edit1.Text := _asPriorities[ComboBox1.ItemIndex];
// Nur um zu zeigen, dass auch jeweils eine andere Konstante ausgewählt wird
Edit2.Text := IntToStr(Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcID : Cardinal;
begin
if not OpenDialog1.Execute then exit;
ProcID := 0;
RunProcess(OpenDialog1.FileName, SW_SHOW, True, @ProcID, Cardinal(ComboBox1.Items.Objects[ComboBox1.ItemIndex]) );
end;
Das ist der aktuelle Code. Leider wird die Priorität da nicht geändert...
Wo ist der Fehler? Ich finde ihn nicht...
CU
DRPEnc
|
|
Zitat
|