| Autor |
Beitrag |
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 15.06.05 11:49
Moin! Hab folgenden Code durch die Suche gefunden und leicht modifiziert:
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: 24: 25: 26:
| program hemetz;
uses Windows, tlhelp32, SysUtils;
Var Proc: PROCESSENTRY32; HSnap: HWND; Looper: BOOL;
Begin Proc.dwSize:= SizeOf(Proc); HSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); Looper:= Process32First(HSnap, Proc); While Integer(Looper)<> 0 Do Begin If ExtractFileName(Proc.szExeFile)= 'explorer.exe' then Begin SetPriorityClass(proc.th32ParentProcessID, NORMAL_PRIORITY_CLASS); Break; End Else Looper:= Process32Next(HSnap, Proc); End; CloseHandle(HSnap); end. |
Allerdings wird die Prozesspriorität des Explorers nicht gesetzt, obwohl die th32ParentProcessID den richtigen Wert hat. Warum?
AXMD
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 15.06.05 11:55
du brauchst hier nicht die prozessid, sondern ein prozesshandle das du mit openprocess kriegst.
| Zitat: |
hProcess
[in] Handle to the process.
The handle must have the PROCESS_SET_INFORMATION access right. For more information, see Process Security and Access Rights.
|
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 15.06.05 12:01
Funktioniert trotzdem nicht. Irgendwo ist da eine Wand ^^
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: 24: 25: 26: 27: 28: 29:
| program hemetz;
uses Windows, tlhelp32, SysUtils;
Var Proc: PROCESSENTRY32; HSnap: HWND; Looper: BOOL;
temp: Cardinal;
Begin Proc.dwSize:= SizeOf(Proc); HSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); Looper:= Process32First(HSnap, Proc); While Integer(Looper)<> 0 Do Begin If ExtractFileName(Proc.szExeFile)= 'explorer.exe' then Begin temp := OpenProcess(PROCESS_SET_INFORMATION, false, proc.th32ParentProcessID); SetPriorityClass(temp, NORMAL_PRIORITY_CLASS); Break; End Else Looper:= Process32Next(HSnap, Proc); End; CloseHandle(HSnap); end. |
AXMD
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 15.06.05 12:13
Delphi-Quelltext 1: 2:
| temp := OpenProcess(PROCESS_SET_INFORMATION, false, proc.th32ParentProcessID); SetPriorityClass(temp, NORMAL_PRIORITY_CLASS); |
hier wird nicht geprüft on temp <> INVALID_HANDLE_VALUE
ansonsten brauchst du vielleicht debug privilegien....
nicht vergessen, das handle mit closehandle wieder zu schliessen.
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 15.06.05 12:32
retnyg hat folgendes geschrieben: | | ansonsten brauchst du vielleicht debug privilegien.... |
Und wie bekomm ich die?
AXMD
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 15.06.05 12:34
ich verwende getDegugPrivilege aus der uallcollection, unit uallprotect
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 15.06.05 13:21
retnyg hat folgendes geschrieben: | | ich verwende getDegugPrivilege aus der uallcollection, unit uallprotect |
Funktioniert trotzdem nicht
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| program hemetz;
uses Windows, tlhelp32, SysUtils, uallProtect in 'uallProtect.pas';
Var Proc: PROCESSENTRY32; HSnap: HWND; Looper: BOOL;
temp: Cardinal;
Begin uallProtect.GetDebugPrivilege;
Proc.dwSize:= SizeOf(Proc); HSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); Looper:= Process32First(HSnap, Proc); While Integer(Looper)<> 0 Do Begin If ExtractFileName(Proc.szExeFile)= 'explorer.exe' then Begin temp := OpenProcess(PROCESS_SET_INFORMATION, false, proc.th32ParentProcessID); SetPriorityClass(temp, NORMAL_PRIORITY_CLASS); CloseHandle(temp); Break; End Else Looper:= Process32Next(HSnap, Proc); End; CloseHandle(HSnap); end. |
AXMD
PS. Ich tippe eher auf einen anderen Fehler...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 15.06.05 13:26
Wird der Prozess denn überhaupt gefunden? Und überprüf doch mal, wie es dir schon empfohlen wurde, die Rückgabewerte und lass dir mal den letzten Systemfehler ausgeben. Und prüf vorallem mal den Rückgabewert von SetProcessPriority.
Ürigens gibt es zwei Explorer Prozesse, einmal als Shell und einmal, wenn du ihn als Dateibrowser geöffnet hast. Ich gehe davon aus, dass du immer den Shell-Explorer findest, und da der Prozess nicht dir gehört, kannst du dessen Priorität nicht ändern. Der Systemfehler sollte dann 'Zugruff verweigert' sein. Starte mal den Taskmanager und guck mal, was für eine ID der Shell-Explorer Prozess hat und vergleiche sie mit der ID des gefundenen Explorer Prozesses.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 15.06.05 13:34
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| program hemetz;
uses Windows, uallprocess, uallProtect;
Var
temp, pid: Cardinal;
Begin GetDebugPrivilege; pid := findprocess('explorer.exe'); if pid <> 0 then begin temp := OpenProcess(PROCESS_SET_INFORMATION, false, pid); if temp <> invalid_handle_value then begin SetPriorityClass(temp, NORMAL_PRIORITY_CLASS); CloseHandle(temp); end; End; end. |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 15.06.05 13:37
Vielen herzlichen Dank, retnyg  . @Luckie: auf die Shell sollte ich als Admin doch Zugriff haben, oder? Im Taskmanager kann ich deren Priorität ja auch setzen (die Nicht-"Arbeitsplatz"-explorer.exe). Es hatten übrigens beide Prozesse (der gefundene und der im Taskmanager die selbe PID (1536)).
Funktioniert ja jetzt, danke
AXMD
|
|
zeronoob
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 12.07.05 00:15
hi leute
dieses "Prozesspriorität setzen" ding würde mich auch interessieren
Ich benutze Delphi 7 Enterp.
aber kann die "uallProtect.dcu / uallProtect.pas" und die "uallprocess.dcu / uallprocess.pas" nirgens finden
woher bekomme ich die?
//EDIT 2
hmm bin noch relative noob :/
wie mache ich auch den *.pas ne *.dcu damit Delphi 7 diese files akzeptiert?
habs schon versucht mit -> speichern -> landen -> compillieren, dann ertsellt er mir
ne *.dcu, aber wenn ich dise dann in Delphi verwende killt sich delphi selbst
kann mir da wer helfen?
Zuletzt bearbeitet von zeronoob am Di 12.07.05 00:59, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 12.07.05 00:21
Google oder PN an die betreffende Person.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 12.07.05 06:25
einfach neues projekt erstellen, dann due pas dateien in den selben ordner wie das gespeicherte projekt und diese dann beu uses reinschreiben, dann erstellt delphi7 beim compilieren automatisch die dcu dateien
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
|