AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Priorität einer .exe Datei ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Priorität einer .exe Datei ändern

Ein Thema von joghthyrn · begonnen am 17. Dez 2004 · letzter Beitrag vom 17. Dez 2004
Antwort Antwort
joghthyrn

Registriert seit: 16. Jan 2004
7 Beiträge
 
#1

Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 17:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 17:32
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
joghthyrn

Registriert seit: 16. Jan 2004
7 Beiträge
 
#3

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 17:53
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
Und jedem Anfang wohnt ein Zauber inne, ...
Das Suchen und der Weg sind wichtiger, als daß man wirklich etwas findet. (Menuhin)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 17:59
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
joghthyrn

Registriert seit: 16. Jan 2004
7 Beiträge
 
#5

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 18:01
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
Und jedem Anfang wohnt ein Zauber inne, ...
Das Suchen und der Weg sind wichtiger, als daß man wirklich etwas findet. (Menuhin)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 18:10
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
joghthyrn

Registriert seit: 16. Jan 2004
7 Beiträge
 
#7

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 18:16
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.
Und jedem Anfang wohnt ein Zauber inne, ...
Das Suchen und der Weg sind wichtiger, als daß man wirklich etwas findet. (Menuhin)
  Mit Zitat antworten Zitat
joghthyrn

Registriert seit: 16. Jan 2004
7 Beiträge
 
#8

Re: Priorität einer .exe Datei ändern

  Alt 17. Dez 2004, 18:20
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.
Und jedem Anfang wohnt ein Zauber inne, ...
Das Suchen und der Weg sind wichtiger, als daß man wirklich etwas findet. (Menuhin)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz