Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Priorität einer .exe Datei ändern (https://www.delphipraxis.net/36251-prioritaet-einer-exe-datei-aendern.html)

joghthyrn 17. Dez 2004 17:16


Priorität einer .exe Datei ändern
 
Hier ist mein eigendliches Problem:

Ich möchte ein Programm bauen, dass mir im Hintergrund die Priorität eines neu startenden Programmes ändert. Anhand einer Liste, die der Nutzer von Hand erstellt (z.b. in dem er das Programm anklickt, dass später die Priorität geändert kriegen soll) soll automatisch wenn ein Prozess aus der exe gestartet wird die Priorität auf einen voreingestellten Wert gesetzt werden.

Ob das Programm pollt und schaut ob ein neues Programm da ist oder ob es durch irgend eine Art Hook erkennt wenn was neues gestartet wird, ist mir dabei egal. Es ist nicht zeitkritisch.

Was ich wissen möchte:

1.) Wie ermittele ich den exe Namen des Programms, wenn ich es zb anklicke.

2.) Wie ermittle ich (zb Hook) ob ein Programm gestartet wird / wurde

3.) Wie erkenne ich für einen Prozess ob es der passende zu meiner exe ist

4.) Wie ändere ich die Priorität des Prozesses

Aufgabe 4 habe ich teilweise aus den anderen Posts verstanden. Bei dem Rest hakt es allerdings noch. Ich würde mich sehr über jede Art von Hilfe freuen.

Dank im Vorraus
Christian

Luckie 17. Dez 2004 17:32

Re: Priorität einer .exe Datei ändern
 
Zitat:

Zitat von joghthyrn
1.) Wie ermittele ich den exe Namen des Programms, wenn ich es zb anklicke.

Erstell dir eine Prozessliste, entweder mit MSDN-Library durchsuchenCreateToolHelp32Snapshot oder MSDN-Library durchsuchenEnumProcesse. Code dazu gibt es hier nei mir.

Zitat:

2.) Wie ermittle ich (zb Hook) ob ein Programm gestartet wird / wurde
Mit einem ShellHook auf MSDN-Library durchsuchenCreateProcess oder in dem du regelmäßog in einem Thread die Prozessliste erstellst.

Zitat:

3.) Wie erkenne ich für einen Prozess ob es der passende zu meiner exe ist
Mit der Prozessliste hast du schon die Exe.

Zitat:

4.) Wie ändere ich die Priorität des Prozesses
Mit MSDN-Library durchsuchenOpenProcess einen Handle auf den Prozess holen und mit MSDN-Library durchsuchenSetPriorityClass die Priorität ändern. Lesenswert dazu wäre noch mein Threading Tutorial auf meiner Seite: http://tutorials.luckie-online.de

Aber warum willst du die Priorität ändern? Ich würde nur in wohlbegründeten Ausnahmefällen in das Scheduling von Windows eingreifen.

joghthyrn 17. Dez 2004 17:53

Re: Priorität einer .exe Datei ändern
 
Meine Probleme sind die folgenden:

1.) Wenn ich Fehrnshene mag (mein Fehrnseher ist defekt) beendet sich VLC wenn ich rechenintensive Programme starte. Zb Outlook und teilweise andere Office Programme. Selbiges gilt für's Brennen und Delphi. Ich möchte bestimmte Programme direkt beim Starten mit anderen Prioritäten versehen. Welche das im einzelnen sind, weiss ich aus 12 Jahre langer Erfahrung recht gut :-) Aber danke für den Hinweis - normalerweise lasse ich Windows freie Hand.

2.) Ich biete Windows Support bei Privatkunden an, und erlebe in den letzten Jahren enorme Mehrarbeit durch Viren/Trojaner ....
Das Programm soll ausser der Priorität auch Anwendungen killen können. Vermutlich das was AV Software auch macht. Nur dummerweise kriegt einige AV das nicht hin.

Desweiteren wird es dann ein Toolkit dass auch Autostart Einträge und Dienst änderungen überwachen soll.

Soweit zur Idee :-)
Danke für die Hilfe, ich schaue mal ob ich das soweit hinkriege.

Christian

Luckie 17. Dez 2004 17:59

Re: Priorität einer .exe Datei ändern
 
Seit wann ist Outlook und Office rechenintensiv? Ich bin mir sicher du suchst den Fehler an der falschen Stelle. Desweotern würde es wesentlich mehr Sinn machen die Ursachen zu beheben, anstatt an den Symptomen rumzudoktern.

joghthyrn 17. Dez 2004 18:01

Re: Priorität einer .exe Datei ändern
 
Zu Problem 1 habe ich noch eine Frage:

Dein Source zeigt ja wie man eine Process Liste erstellt, aber wie erhalte ich die ProcessID / Handle des Fensters, dass ich anklicke ? Ich erinnere mich an eine Routine HandleUnderMouse() ... oder so ähnlich.

Das war die eigendliche Frage. Sprich ich sage meinem Programm, "Nimm das Handle vom nächsten Fenster dass ich anklicke"

Danke nochmal

Luckie 17. Dez 2004 18:10

Re: Priorität einer .exe Datei ändern
 
MSDN-Library durchsuchenGetProcessID. Aber was willst du mit dem Handle eines Fensters? Du kannst nur die Priorität eines Prozesses ändern. Ein Fenster gehört zwar zu einem Prozess, hat aber keine Priorität. Wenn du das Handle eines Fesnters hast, kannst du mir MSDN-Library durchsuchenGetWindowThreadProcessId die ID des Threads erhalten, der das Fenster erzeugt hat.

joghthyrn 17. Dez 2004 18:16

Re: Priorität einer .exe Datei ändern
 
Zu Deiner Antwort:

Ich habe lange Test gemacht mit diversen Programmen. Bei bestimmten fällt VLC immer aus.
Outlook lädt beim starten viel von der Platte, die CPU geht dabei auf 100% Last. Die User Zeit liegt dabei bei etwa 99%. Word, bzw Excel scheinen dieses Verhalten nur gelegentlich zu zeigen. Während der Arbeit mit Word oder Excel habe ich die Probleme nicht. Wenn Outlook Mails abruft kommt das Problem wieder zum tragen.

Da ich auf die Konstellation JackTheGRabber und VideoLanClient angewiesen bin, um gelegendlich Fehrn zu sehen, oder etwas aufzunehmen, möchte ich nicht dass dann jedesmal die Netzverbindung zwischen der DBOX und JTG als Streamingserver zusammen bricht.

Wenn ich die Priorität von Outlook per Windows TaskManager auf niedriger als Normal setze, reicht es schon, keine Abbrüche mehr.

Nach vielen Wiederholungen ergibt sich immer das selbe.

Ein weiteres Programm, DVDLab, mit dem man aus den Dbox Streams DVD brennen kann, hat einen Programmfehler und lastet die CPU 100% aus, sobald man es startet.

Das Symptom verschwindet ebenfalls sofort, wenn man die Priorität herunter setzt.

Ich denke nicht, dass dieses Problem viele Menschen haben werden :-) aber ich möchte eine Lösung dafür haben.

Wenn Dir noch eine andere möglichkeit einfällt (Neuinstallation hilft nicht, Hardware tausch auch nicht) bin ich ganz Ohr :-)

Trotzdem Danke für die Hilfe.

joghthyrn 17. Dez 2004 18:20

Re: Priorität einer .exe Datei ändern
 
:-) Jetzt antwrte ich immer versetzt :-)

Du hast die Frage schon beantwortet. Ich möchte halt Meinem Programm mitteilen, dass ich Outlook demnächst nur noch mit Priorität Niedrig starten mag. Also klicke ich den entsprechenden Knopf in meinem Programm, klicke auf das Fenster von Outlook und erhalte ein Handle.

Dann suche ich zu dem Handle den Hauptthread ind setze dessen Priorität auf Niedrig.

Das speichere ich in einer Liste.

Ab jetzt überwacht der Hook (den ich hoffentlich hinkriege :-p ) wann outlook.exe wieder gestartet wird und setzte automatisch dessen Priorität auf niedrig.

Das wars schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz