Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CPU- und Speicherauslastung ermitteln

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.12.2008, 21:09    Titel: CPU- und Speicherauslastung ermitteln Antworten mit Zitat

Ich will ein Programm schreiben, mit dem ich die CPU-Auslastung insgesamt und die CPU-Auslastung und auch die Speicherauslastung jedes einzelnen Prozesses auslesen und loggen kann.

Für die CPU-Auslastung insgesamt gibt es ein Code-Beispiel von csde_rats (http://www.freebasic-portal.de/index.php?s=code&id=94). Das ist aber mit VBS und das wollte ich doch etwas anders machen.

Ich hab noch was anderes gefunden:

Code:
#Include "windows.bi"

#Undef HiWord
#Undef LoWord

#Define HiWord(Ausdruck) Ausdruck = CUnsg(Ausdruck) Shr 16 And &hFFFF
#Define LoWord(Ausdruck) Ausdruck = Ausdruck AND 65535

Declare Function GetCPULoad() As Double

Function GetCPULoad() As Double
    Static As  Dword dwLastProcessTime = 0
    Static As  Dword dwLastSystemTime = 0
    Static As  Double dCPULoad = 0

    Dim As FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime
   
    GetProcessTimes(GetCurrentProcess(),@ftCreationTime,@ftExitTime,@ftKernelTime,@ftUserTime)

    Dim As ULongInt uiKernelTime, uiUserTime
   
    HiWord(uiKernelTime) = ftKernelTime.dwHighDateTime
    LoWord(uiKernelTime)  = ftKernelTime.dwLowDateTime
    HiWord(uiUserTime) = ftUserTime.dwHighDateTime
    LoWord(uiUserTime)  = ftUserTime.dwLowDateTime

    Dim As Dword dwActualProcessTime = Cast(Dword, ((uiKernelTime + uiUserTime)/100))
    Dim As Dword dwActualSystemTime  = GetTickCount()

    If(dwLastSystemTime) Then
        dCPULoad = Cast(Double, (dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime))
    EndIf
   
    dwLastProcessTime = dwActualProcessTime
    dwLastSystemTime  = dwActualSystemTime

    return dCPULoad
End Function


Print "Init: " & GetCPULoad()

Do
   Sleep 500
   Print "CPU Auslastung: " & GetCPULoad() & "%"
   If InKey = Chr(27) Then Exit Do
Loop

Sleep


Das gibt aber bei mir immer nur den Wert 0 raus obwohl der Taskmanager was anderes sagt.

Das nächste Problem ist, die CPU- und Speicherauslastung für jeden einzelnen Prozess zu ermitteln. Dazu hab ich gar nichts gefunden. Im vb@rchiv hab ich auch schon geschaut, aber nichts passendes gefunden.
Wenigstens hab ich schon einen Code, um die aktuell aktiven Prozesse auszugeben:

Code:
#Include Once "windows.bi"
#Include Once "win/tlhelp32.bi"


Declare Sub GetExeNames

Declare Function ProcessFirst Lib "kernel32" Alias _
        "Process32First" (ByVal hSnapShot As handle, uProcess _
        As PROCESSENTRY32) As Long

Declare Function ProcessNext Lib "kernel32" Alias _
        "Process32Next" (ByVal hSnapShot As handle, uProcess _
        As PROCESSENTRY32) As Long

GetExeNames
Sleep
end

Sub GetExeNames
    Dim hSnapShot As handle, Result As Long
    Dim aa As String
    Dim Process As PROCESSENTRY32

    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, null)
    If hSnapShot = 0 Then Exit Sub

    Process.dwSize = Len(Process)
    Result = ProcessFirst(hSnapShot, Process)
 
    Do While Result <> 0
        aa = Process.szExeFile
       
        Print aa
        Result = ProcessNext(hSnapShot, Process)
       
    Loop
    CloseHandle(hSnapShot)
End Sub


Kann mir jemand die passenden WinAPI-Funktionen sagen, vielleicht auch mit Beispiel zwinkern


MOD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 02.12.2008, 22:11    Titel: Antworten mit Zitat

fbProcMon.... source fliegt auf meiner HP rum:
http://28398.org/_proj/fbProcMon/devel.7z
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 02.12.2008, 22:56    Titel: Antworten mit Zitat

CPU-Auslastung via WMI-Schnittstelle:

http://beilagen.dreael.ch/QB/CPULOAD.BAS
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.12.2008, 23:24    Titel: Antworten mit Zitat

An fbProcMon hab ich auch schon gedacht, aber nachdem ich in den vielen Dateien nichts gesehen hab und das Programm die CPU- und Speicherauslastung nicht anzeigt, hab ich gedacht, dass es einfach nicht drin ist.
Kannst du mir vielleicht sagen, wo in etwa du das hast, fremde Codes sind immer so unübersichtlich zwinkern

@dreael: Über WMI wollt ich es eben nicht machen, weil ich das in der Registry geblockt habe und auch so lassen möchte. Dein Beispiel ist ja das gleiche, das ich im ersten Post verlinkt hab.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz