Seite 1 von 2
Programm öffnen und Priorität verändern
Verfasst: 11.04.2007 17:58
von kreeph
Hallo Leute ich habe eine Frage:
Wenn ich bestimmte Programme öffne, reagieren Programme im Hintergrung wie zum Beispiel ein Musikplayer schlecht bis garnicht mehr oder stocken. Wenn ich die Priortät der anderen Programme verändere, läuft der Player wieder einwandfrei. Jetzt habe ich mir gedacht, ich schreibe ein kleines Programm, das mir meine Sachen öffnet und ihre Priorität auf sehr niedrig setzt. Habe wie immer zuerst angefangen in der Hilfe-Datei rumzustöbern und auf eigene Faust einen Code auf die Reihe zu bekommen. Hat nich geklappt. Ich denke ich kenn einfach noch zu wenig Befehle... Deshalb wollte ich fragen ob jemand mir mit meinem 3.30 PB weiterhelfen kann.
Danke schonmal!

Verfasst: 11.04.2007 20:16
von Sicro
Hallo kreeph,
ein Thread mit diesem Thema befindet sich bereits hier:
http://www.purebasic.fr/german/viewtopi ... 257#109257
Mfg DerProgger
Verfasst: 11.04.2007 21:04
von kreeph
Oh danke, hätte natürlich erstmal das Forum durchstöbern sollen.
Kann man das auch in 3.30 PB schreiben, ich krieg z.B. die SetPriority() Funktion nicht hin.
Verfasst: 11.04.2007 22:07
von edel
Fehlerbeschreibung posten ...
Verfasst: 12.04.2007 06:45
von kreeph
Naja in meinem PB gibt es die Funktion anscheinend nicht.
SetPriority() is not a function, an array, or a linked list.
Ich finde das auch in der Hilfe-Datei nicht.

Verfasst: 12.04.2007 08:17
von Tafkadasom2k5
Das ist eine WinAPI-Funktion.
Aber AFAIK sollte dir folgendes wohl mehr helfen:
Win32API hat geschrieben:BOOL SetPriorityClass(
HANDLE hProcess, // handle to the process
DWORD dwPriorityClass // priority class value
);
Parameters
->hProcess
Identifies the process.
Windows NT: The handle must have the PROCESS_SET_INFORMATION access right. For more information, see Process Objects.
->dwPriorityClass
Specifies the priority class for the process. Specify one of the following values:
Priority
HIGH_PRIORITY_CLASS
Specify this class for a process that performs time-critical tasks that must be executed immediately. The threads of the process preempt the threads of normal or idle priority class processes. An example is Windows Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class application can use nearly all available CPU time.
IDLE_PRIORITY_CLASS
Specify this class for a process whose threads run only when the system is idle. The threads of the process are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle-priority class is inherited by child processes.
NORMAL_PRIORITY_CLASS
Specify this class for a process with no special scheduling needs.
REALTIME_PRIORITY_CLASS
Specify this class for a process that has the highest possible priority. The threads of the process preempt the threads of all other processes, including operating system processes performing important tasks. For example, a real-time process that executes for more than a very brief interval can cause disk caches not to flush or cause the mouse to be unresponsive.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Gr33tz
Tafkadasom2k5
(P.S.: Habs nur für dich schön neu formatiert und Hervorhebungen gemacht

)
Edit
Ich finde das in der Hilfe-Datei nicht
Ja, weil es kein Purebasic-Befehl ist, sondern eine Windows-API, eine Art Bibliothek von Windows ist.
Verfasst: 12.04.2007 08:35
von kreeph
Na also danke erstmal für die Arbeit (Ist sicher nicht leicht sowas für Anfänger zu formulieren

) aber ich krieg das irgentwie immer noch nicht in meinen Code.
Kannst du mir vllt. ein Beispiel geben indem ich z.B. eine Flash-Anwendung auf niedriger Priorität öffne?
Hoffe ich mach euch nicht zuviel Mühe

Verfasst: 12.04.2007 08:55
von Tafkadasom2k5
In PB gibt es einen Befehl, um Progrsamme auszuführen. AFAIK gibt es unter PB eine Art ShellExecute-Befehl (RunProgram/Shell oder so..), die gibt dir das Handle des neuen Programmes zurück.
So sollte es theoretisch auch gehen (nur Windows..!)
Code: Alles auswählen
sProgrammpfad.s = ""
hNewProgram.l = ShellExecute_(GetDesktopWindow_(), @"open", @sProgrammpfad, 0, 0, #SW_SHOWNORMAL)
SetPriorityClass_(hNewProgram,#HIGH_PRIORITY_CLASS )
(Ungetestet)
Gr33tz
Tafkadasom2k5
Edit:
Das ist jetzt eines der wenigen Male, wo ich dir ne Lösung vorkaue

Das nächste Mal, werd ich dir nur die richtigen Befehle zeigen, den Rest machst du- wie man mit der WinAPI umgeht, solltest du aus meinen beispielen vertsnadne ahben.
Verfasst: 12.04.2007 09:25
von kreeph
Ok danke, ich habe mit dem WinAPI noch nix gemacht und das war mir unbekannt.

Naja mein Programm lässt sich jetzt auch problemlos starten, aber die Priorität verändert sich irgentwie nicht wie ich im Task-Manager gesegen habe.
Naja dann noch eine Frage: Es scheint ja eine ganze Menge mit diesem WinAPI zu geben und die Befehle muss es ja auch irgentwo geben bzw. sie müssen irgentwo gespeichert sein. Wo finde ich die denn?
Und natürlich noch das Problem, dass sich die Priorität nicht verändert...

Verfasst: 12.04.2007 09:59
von Tafkadasom2k5
Dann wirst du dich jetzt auf eine "unendliche Geschichte" einlassen müssen.
Wer in die weiten Welten der
http://msdn.com geht, wird so bald nicht mehr ohne Kopfschmerzen rauskommen
Schau dir notfalls den Priority-Befehl nochmals an.
kA Warum das nicht funktioniert, vielleicht hab ich mich da auch mit den Handles vertan.
Ich übergeb mal an jemand Anderen, der das bestimmt schonmal gemacht hat
Ich werde aber, sobald ich was Anderes herausfinde, mich nochmals melden
Gr33tz
Tafkadasom2k5