Prozess in hoher Priorität starten - aber wie?

Pascal1

er ist Klamm
19 August 2007
13
0
Hi,

hier ist ein Thread " https://www.klamm.de/forum/showthread.php?t=64590&highlight=Prozesspriorit%E4t ", wo man einen Prozess in einer niedrigen Priorität starten kann. Ich will es aber genau umgekehrt.

Der Prozess heißt Powerpnt.exe (aber unter Anwendungen im Task-Manager steht der Dateiname "praesi.ppsx". Aber dort kann man keine Priorität sehen oder festlegen. Ich denke, dass man also die powerpnt.exe mit einer Priorität belegen muß, damit die praese.ppsx davon profitiert).

Aber wie macht man das jetzt? Mit einer Batch-Datei starten per

a)
start /HIGH praesi.ppsx oder

b)
start /HIGH powerpnt.exe und danach die praese.ppsx aufrufen, nützt nix. Die Priorität bleibt in beiden Fällen auf normal. Außerdem startet der bei Version "b)" einfach zuerst einmal Powerpoint(ne leer mappe) und dann extra nochmal die prase.ppsx.

Das hier habe ich noch gefunden:
Code:
' This code sets the priority of a process

Const NORMAL        = 32
Const IDLE          = 64
Const HIGH_PRIORITY = 128
Const REALTIME      = 256
Const BELOW_NORMAL  = 16384
Const ABOVE_NORMAL  = 32768

' ---------------------------------------------------------------
' From the book "Windows Server Cookbook" by Robbie Allen
' ISBN: 0-596-00633-0
' ---------------------------------------------------------------

' ------ SCRIPT CONFIGURATION ------
strComputer = "."
intPID      = 3280          ' set this to the PID of the target process
intPriority = HIGH_PRIORITY ' Set this to one of the constants above
' ------ END CONFIGURATION ---------
WScript.Echo "Process PID: " & intPID
set objWMIProcess = GetObject("winmgmts:\\" & strComputer & _
                    "\root\cimv2:Win32_Process.Handle='" & intPID & "'")
WScript.Echo "Process name: " & objWMIProcess.Name
intRC = objWMIProcess.SetPriority(intPriority) 
if intRC = 0 Then
   Wscript.Echo "Successfully set priority."
else
   Wscript.Echo "Could not set priority. Error code: " & intRC
end if
Aber woher bekomme ich die "intPID" von der praesi.ppsx ?

Pascal
 
Zuletzt bearbeitet:
Aber woher bekomme ich die "intPID" von der praesi.ppsx ?

Pascal

Die Prozess ID könntest du z.b. so bekommen:

-Handle vom richtigen Powerpoint Fenster ermitteln
-Aufruf von CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
-Process32First/process32Next aufrufen
-Handle mit OpenProcess ermitteln und mit dem vorher ermittelten handle vergleichen
-Wenn richtig, dann hast du die richtige PID

So würds ich jetzt mit der WinAPI in W32 ASM machen, allerdings weis ich ned, ob du damit überhaupt was anfangen kannst und ob VBS das überhaupt unterstützt :think:

Die Prozess ID kannst du aber auch vom Taskmanager aus rauslesen.
Taskmanager öffnen > Ansicht > Spalten > PID aktivieren

Dann kannst du die ganz einfach rauslesen, wobei ich nicht weis, ob die PID immer gleich ist, kann ich mir irgendwie gar nicht vorstellen.
 
also mit dem Ersteren kann ich wirlich nichts anfangen.

Die Pid ändert sich bei jedem Start von Powerpoint :(
 
Warum muss überhaupt die priorität geändert werden?

Also rein theoretisch könn ich ein Programm schrieben, dass Powerpoint startet und die Prirorität setzt [dürft ja ned schwer sein, die Priorität zu setzen], nur hab ich PP ned da und kanns folglich ned testen, und das ist dann ziemlich blöde.

evtl kann hier ja wer VBS ^^
 
Geht es nur um die eine Präsentation ? Falls ja, bau halt da den VB-Code ein, der die Priorität erhöht. Dann hast du sicher die richtige Instanz von PowerPoint erwischt.
 
und wie geht das? Es geht um eine Präsentation, die auf jedem PC dann direkt ausgeführt wird, beim doppelklicken.

(Erhöhung daher notwendig, weil sonst die Hintergrundmusik nicht zu den Bildern auf allen Systemen gleich abläuft.)
 
und wie geht das? Es geht um eine Präsentation, die auf jedem PC dann direkt ausgeführt wird, beim doppelklicken.
In etwa wie in deinem ersten Posting, nur du musst den Code direkt in die Präsentation setzen.

Du brauchst eigentlich nur:
SetPriorityClass() und GetCurrentProcess()
(Erhöhung daher notwendig, weil sonst die Hintergrundmusik nicht zu den Bildern auf allen Systemen gleich abläuft.)
Das bringt dir nicht wirklich was. Wenn der Rechner zu lahm is, Audio nachzuladen oder abzuspielen, als Bilder anzuzeigen, dass gehts auch mit höherer Priorität ned. Das bringt nur was, wenn auf dem Zielrechner ein Prozess normaler Priorität läuft, der sehr rechenintensiv ist und die Präsentation stört.
 
Also das bringt schon was. Finde ich aber von der Logik her auch komisch. Ich habs ausprobiert(manuell). Powerpoint gestartet, im Taskmanager auf High gestzt und gestartet -> dann liefts perfekt. Auf Normal, halt nicht.

Also in Powerpoint per VB eingeben:

per GetCurrentProcess() die PID herausfinden und dann per SetPriorityClass() dann setzen, oder wie?

Ich kenne mich damit nicht so aus. Könntest du den Code aufschreiben, dass ich ihn übernehmen kann?

Ich gehe per ALt+F11 in VB rein, wenn ich in Powerpoint bin. Danach klicke ich die rechte Maustaste oben links in das Feld "VBA-Projekt" und erstelle ein neues Modul. Dort muß ich dann was eingeben, richtig soweit?

Vielen Dank!!

Pascal
 
starte doch einfach Powerpoint und als Parameter die Datei übergeben.
Dann sollte das eigentlich auch richtig klappen.
 
nee, so geht das nicht, dann müsste ich den genauen Pfad zu POwerpoint und der Datei angeben.

Und ich will die Datei ja gerade auch verteilen - und von anderen PC´s weiß ich die Pfade halt nicht, wo die das speichern.
 
Kann man nicht in Powerpoint per VB die Priorität hochsetzten - z.B. auf Realtime wäre gut!?

Also Alt+F11, dann ist man ja in Powerpoint in VB, dort kann man dann ein neues Modul erstellen und dort einen Programmcode eingeben, welcher die Priorität auf realtime setzt. Nur davon habe ich keine Ahnung.. :(

Weiß jemand wie´s geht?
 
(Erhöhung daher notwendig, weil sonst die Hintergrundmusik nicht zu den Bildern auf allen Systemen gleich abläuft.)
Der Sinn erschließt sich mir nicht.
Wie TheHacker schon sagte, erschlägst du damit lediglich Symthome, die mit hoher Wahrscheinlichkeit nur bei dir (und ähnlich konfigurierten Systemen) auftreten. Ebenso bedenkst du kein Stück, dass es auch andere PP-Viewer gibt (ich sag nur OpenOffice).

Dein Problem ist, dass du krampfhaft die Symthome bekämpfen willst und dich so sehr darin verbissen hast, dass du nicht siehst, dass das Problem per-se darin liegt, dass du deine PP-Präsentation (PPP) einfach nochmal gründlich überdenken, und dann überarbeiten musst. _Wirklich_ auf allen Systemen gleich läuft deine PPP nie ab, lass dir das gesagt sein von jemanden, der das weiß. Und je mehr Code du in deine PPP einbaust (diesen Makro-Mist, der sich VBA nennt), desto weiter wirst du dein Ziel aus den Augen verlieren, weil es immer mehr geben wird, die sich melden und sagen "da kommt ein fehler","da kommt eine messagebox", "da passiert nix" (Stichwort: Makros deaktiviert, Norton Allround Suite, Kaspersky Suite, G-Data Security, Outpost Firewall, AVG, usw.).

Versuch nicht, das gesehene Verhalten zu ändern, indem du weitere Verhaltensweisen hinzufügst, versuch lieber, den wahren Grund zu finden (keine Synchronisation zwischen Bild und Audio) und diesen 'as-simple-as-possible' zu eliminieren, auch wenn das heißen mag, du müsstest das ganze neu erstellen. Deine 'Abnehmen' werden es dir danken.

Klingt nun alles ziemlich altklug, aber ich versuche ja nur zu helfen...

z.B. auf Realtime wäre gut!?
Weißt du eigentlich, was REALTIME für eine Priorität ist und wofür die verwendet wird? Ich glaube nicht...
 
hmm.. ich denke mal für wichtige Systemprozesse. Aber damit lief es bis jetzt auf 4 PC´s.

Mit dem Viewer konnte ich die Datei so schon gar nicht starten. Nur mit Powerpoint halt.

Also die Datei ist für Bekannte bestimmt und die haben alle Powerpoint(jedenfalls im Augenblick). Ansonsten stimmt deine Argumentation natürlich schon. Aber Powerpoint kann es nicht synchron laufen lassen, ich müsste ein anderen Programm verwenden oder ein Video(viel zu groß) verwenden. Daher dieser Trick mit VB(Hilfe erwünscht, ich weiß nicht wie der Code heißt). Und Makros haben die alle aktiviert - und auch kein Anti-Virenprogramm, was da etwas gegen hätte.

Also - wer weiß wie der Code heißt für Realtime.. dem wäre ich dankbar.

Pascal
 
Also - wer weiß wie der Code heißt für Realtime.. dem wäre ich dankbar.
Fertige Lösungen gibt es in diesem Forum nicht. Die benötigen Funktionen stehen alle schon im Thread genannt.

P.S. Also ich würde mir nicht einfach meinem Rechner n Programm setzen lassen, was sich eben mal selber schnell ne Echtzeit-Priorität verpasst :evil:
 
Sind das auch Funktionen die in Powerpoint (VB) funktioinieren? Ich muß die doch dann einfach dort per F11 und dann per "Neues Modul" eintippen, oder? Weil - der startet die ja wohl nicht automatisch mit!?
 
Sind das auch Funktionen die in Powerpoint (VB) funktioinieren?
Ne, die musst du mittels Declare Function aus der WinAPI importieren.
Ich muß die doch dann einfach dort per F11 und dann per "Neues Modul" eintippen, oder? Weil - der startet die ja wohl nicht automatisch mit!?
Bei Word und Excel gibts Events im Document/Workbook-Objekt. Wie bei Powerpoints funktioniert, weiß ich ned; da musste mal kurz in der Referenz blättern.
 
hmm.. na dann bräuchte ich doch die fertige code-zeile.

Ich versteh nur Bahnhof... declare function, winapi?

Pascal
 
https://www.vbarchiv.net/archiv/tipp_details.php?pid=1136%5C
Der Tip hat bei mir funktioniert (is halt für Visual Basic)

Jo, danke. Ich benutze ja VisualBasic in Powerpoint denke ich mal. Aber ich hab´s als Modul engefügt, aber es tut sich nix, wenn ich Powerpoint öffne. Die Priorität bleibt gleich.

Oder mach ich was falsch:


Oder muß ich den Aufruf ganz unten noch irgendwie extra einbinden und dann automatisch starten. Also ein zweites Modul und dieses dann irgendwie automatisch starten?

Pascal
 
Jo, danke. Ich benutze ja VisualBasic in Powerpoint denke ich mal. Aber ich hab´s als Modul engefügt, aber es tut sich nix, wenn ich Powerpoint öffne. Die Priorität bleibt gleich.

Oder mach ich was falsch:


Oder muß ich den Aufruf ganz unten noch irgendwie extra einbinden und dann automatisch starten. Also ein zweites Modul und dieses dann irgendwie automatisch starten?

Pascal

Du musst den Befehl
Code:
SetPriority HIGH_PRIORITY_CLASS
in einer Routine (Sub) ausführen, nicht unten angehängt im Modul