Entwickler-Ecke

Windows API - Programm -> ProzessPriorität per Popupmenu ändern?


JRegier - Di 07.02.06 17:55
Titel: Programm -> ProzessPriorität per Popupmenu ändern?
Hallo,

ich möchte das beim Computerstart Delphi automatisch langsam startet, weil ich habe einen 700 MHz Rechner
und da ich in Delphi noch JEDI Komponenten installiert habe startet Delphi ohnehin langsam.

Und während Delphi langsam aber sicher in Vorbereitung ist, könnte ich andere Aufgaben erledigen
und es würde durch das Setzen auf Niedrige Priorität nicht stören.

Ich starte in Niedriger Priorität per einstellungen im Link also ich rufe Delphi so auf

Quelltext
1:
C:\WINDOWS\system32\cmd.exe /c start /LOW C:\Programme\Borland\Delphi6\delphi32.exe                    


aber dann ist es lästig wenn man das immer im Taskmanager ändern muß,

Gibt es ein Programm dass mir per PopupMenü auf das Symbol in der Taskleiste oder auf den Header eines
Fensters diese Funktion zur Verfügung stellt? So dass ich die Prozesspriorität schnell ändern kann?



Moderiert von user profile iconNarses: Topic aus Off Topic verschoben am Di 21.04.2009 um 15:18


Regan - Di 21.04.09 14:09

Finch hat eine sehr gute Lösung gefunden. Das Delphi-Programm dazu musst du dir aber schon selber schreiben :wink: .
user profile iconFinch hat folgendes geschrieben Zum zitierten Posting springen:
Ok vielen Dank für die schnelle und korrekte Antwort! Ich schreibe noch mal für alle anderen, komplettes Beispiel um von einem beliebigen Prozess die Priorität ändern kann:

Als 1. ist es wichtig, ' Tlhelp32 ' in die Uses einzubinden !

Als 2. erstellt man eine beliebige Prozedur ( ich teste immer gern durch einen Button, welchen ich hier einfach mal nehme ;9 )
 procedure Button1Click(Sender: TObject);

Als 3. nehme man diese Funktion getPid !

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 function getPid(const name: string): integer;
var
hProcSnap: THandle;
pe32: TProcessEntry32;
begin
result:= 0;
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap = INVALID_HANDLE_VALUE then exit;

pe32.dwSize := SizeOf(ProcessEntry32);

if Process32First(hProcSnap, pe32) = true then

   while Process32Next(hProcSnap, pe32) = true do
   begin
    if lowerCase( pe32.szExeFile) = name then
    begin
     result:= pe32.th32ProcessID;
     break;
    end;
   end;
CloseHandle(hProcSnap);
end;


Als letztes lassen wir nun durch einen Klick auf den Button mal die Prozesspriorität von dem Explorer auf Echtzeit setzen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 procedure TForm1.Button1Click(Sender: TObject);
var 
priosetzhandle : thandle;
begin
    priosetzhandle := OpenProcess(PROCESS_SET_INFORMATION, false, getPid('explorer.exe'));
    setpriorityclass(priosetzhandle, REALTIME_PRIORITY_CLASS);
    CloseHandle(priosetzhandle);
end;


Mit NORMAL_PRIORITY_CLASS setz man den Prozess wieder auf normal ;)