Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.06.05 11:49 
Moin! Hab folgenden Code durch die Suche gefunden und leicht modifiziert:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.06.05 12:01 
Funktioniert trotzdem nicht. Irgendwo ist da eine Wand ^^

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 15.06.05 12:13 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.06.05 12:32 
user profile iconretnyg hat folgendes geschrieben:
ansonsten brauchst du vielleicht debug privilegien....


Und wie bekomm ich die?

AXMD
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.06.05 13:21 
user profile iconretnyg hat folgendes geschrieben:
ich verwende getDegugPrivilege aus der uallcollection, unit uallprotect


Funktioniert trotzdem nicht

ausblenden volle Höhe 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:
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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 15.06.05 13:34 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.06.05 13:37 
Vielen herzlichen Dank, retnyg 8). @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 :D

AXMD
zeronoob
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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



BeitragVerfasst: Di 12.07.05 00:21 
Google oder PN an die betreffende Person.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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