Programm öffnen und Priorität verändern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Programm öffnen und Priorität verändern

Beitrag 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! :D
Ich benutze PureBasic 3.30
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Hallo kreeph,

ein Thread mit diesem Thema befindet sich bereits hier:
http://www.purebasic.fr/german/viewtopi ... 257#109257

Mfg DerProgger
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Oh danke, hätte natürlich erstmal das Forum durchstöbern sollen. :oops:
Kann man das auch in 3.30 PB schreiben, ich krieg z.B. die SetPriority() Funktion nicht hin.
Ich benutze PureBasic 3.30
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Fehlerbeschreibung posten ...
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag 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.
:(
Ich benutze PureBasic 3.30
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Na also danke erstmal für die Arbeit (Ist sicher nicht leicht sowas für Anfänger zu formulieren :D ) 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 :wink:
Ich benutze PureBasic 3.30
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag von kreeph »

Ok danke, ich habe mit dem WinAPI noch nix gemacht und das war mir unbekannt. :mrgreen: 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... :D
Ich benutze PureBasic 3.30
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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 :wink:

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 :mrgreen:
Ich werde aber, sobald ich was Anderes herausfinde, mich nochmals melden ;)

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten