Hallo zusammen,
eins möchte ich direkt vorweg sagen. Ich probiere zwar immer wieder mit AutoIt ein bisschen zu basteln, aber grundsätzlich zähle ich wohl eher als "Anfänger", was mein Wissen angeht.
Nun zu meinem Projekt und Problem:
Ich bin gerade dabei einen kleinen übersichtlichen "Monitor" für mein Notebook zu erstellen. In diesem Monitor sollen vorerst die Auslastung von CPU, RAM, GPU und Akku-Status angezeigt werden. Bis auf die GPU-Auslastung funktioniert der Monitor auch schon recht gut.
Leider komme ich bei der GPU-Anzeige an meine Grenzen und hoffe hier in dem Forum auf Hilfe und konstruktive Kritik.
Kann mir jemand einen Tip geben, wie ich die GPU-Auslastung für Nvidia-Grafikkarten auslesen kann?
Hier ist mein derzeitiger "Bastelstand":
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode",1)
#Region ### START Koda GUI section ### Form=C:\Users\elehchr\Desktop\Test\Notebook-Status.kxf
$Form1 = GUICreate("Notebook-Status", 241, 346, 837, 405)
GUISetIcon("D:\USERS\elehchr\AutoIt\Notebook-Status\Task-Manager.ico", -1)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
$lbl_host = GUICtrlCreateLabel(@UserName & " @ " & @ComputerName, 8, 8, 222, 17, $SS_CENTER)
$grp_batterie = GUICtrlCreateGroup("Batterie ", 8, 264, 225, 73)
$progress_batterie = GUICtrlCreateProgress(16, 280, 206, 25)
$lbl_batterie = GUICtrlCreateLabel("%", 16, 312, 206, 17, $SS_CENTER)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grp_ram = GUICtrlCreateGroup("RAM ", 8, 104, 225, 73)
$lbl_ram = GUICtrlCreateLabel("%", 16, 152, 206, 17, $SS_CENTER)
$progress_ram = GUICtrlCreateProgress(16, 120, 206, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grp_gpu = GUICtrlCreateGroup("GPU ", 8, 184, 225, 73)
$lbl_gpu = GUICtrlCreateLabel("%", 16, 232, 206, 17, $SS_CENTER)
$progress_gpu = GUICtrlCreateProgress(16, 200, 206, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grp_cpu = GUICtrlCreateGroup("CPU ", 8, 24, 225, 73)
$lbl_cpu = GUICtrlCreateLabel("%", 16, 72, 206, 17, $SS_CENTER)
$progress_cpu = GUICtrlCreateProgress(16, 40, 206, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")
WinSetOnTop ( "Notebook-Status", "", 1 )
While 1
_batterie()
_ram()
_gpu()
_cpu()
Sleep (500)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#Region Batterie ################################################################################
Func _batterie()
; Batterieanzeige in Prozent
$SYSTEM_POWER_STATUS = DllStructCreate("byte;byte;byte;byte;int;int")
DllCall("kernel32.dll", "int", "GetSystemPowerStatus", _
"ptr", DllStructGetPtr($SYSTEM_POWER_STATUS))
$Batterie = DllStructGetData($SYSTEM_POWER_STATUS, 3)
GUICtrlSetData ($lbl_batterie, "")
GUICtrlSetData ($lbl_batterie, $Batterie & " % ")
; Batterie-Progressbar
GUICtrlSetData($progress_batterie, $Batterie)
; Ladezustand der Batterie auslesen
$sWMIService = "winmgmts:\\.\root\WMI"
$objWMIService = ObjGet($sWMIService)
If IsObj($objWMIService) Then
$colItems = $objWMIService.ExecQuery("SELECT * FROM BatteryStatus")
If IsObj($colItems) Then
For $oItem In $colItems
$ladezustand = $oItem.Charging
if $ladezustand = True Then ; Wenn die Batterie geladen wird...
GUICtrlSetData ($grp_batterie, "Batterie - Netzbetrieb ")
GUICtrlSetColor($progress_batterie, 0x0033FF) ;blau
For $i = 0 To $Batterie Step 1
GUICtrlSetData($progress_batterie, $i)
Sleep(1)
Next
ExitLoop
Else
GUICtrlSetData ($grp_batterie, "Batterie - Akkubetrieb ")
If $Batterie > 25 Then
GUICtrlSetColor($progress_batterie, 0x00FF00) ;grün
Else
GUICtrlSetColor($progress_batterie, 0xFF0000) ;rot
EndIf
ExitLoop
EndIf
Next
Else
MsgBox(16, "Error", "Failed to get collection.")
EndIf
Else
MsgBox(4096, "ERROR", "Failed to connect to WMI at: " & $sWMIService)
EndIf
EndFunc
#EndRegion Batterie #############################################################################
#Region RAM #####################################################################################
Func _ram()
$RAM = MemGetStats()
$RAMauslastung = $RAM[0]
; RAM-Auslastung in Prozent
GUICtrlSetData ($lbl_ram, "")
GUICtrlSetData ($lbl_ram, $RAMauslastung & " % ")
; RAM-Progressbar
GUICtrlSetData($progress_ram, $RAMauslastung)
; Farbe der RAM-Progressbar bestimmen
If $RAMauslastung < 70 Then
GUICtrlSetColor($progress_ram, 0x00FF00) ;grün
Else
GUICtrlSetColor($progress_ram, 0xFF0000) ;rot
EndIf
EndFunc
#EndRegion RAM ###################################################################################
#Region GPU #####################################################################################
Func _gpu()
$gpu = 0
; GPU Auslastung in Prozent
GUICtrlSetData ($lbl_gpu, "")
GUICtrlSetData ($lbl_gpu, $gpu & " % ")
; Progressbar
GUICtrlSetData($progress_gpu, $gpu)
; Farbe der GPU-Progressbar bestimmen
If $gpu < 70 Then
GUICtrlSetColor($progress_gpu, 0x00FF00) ;grün
Else
GUICtrlSetColor($progress_gpu, 0xFF0000) ;rot
EndIf
EndFunc
#EndRegion RAM ###################################################################################
#Region CPU #####################################################################################
Func _cpu()
; Abfrage der CPU Auslastung
$sWMIService = "winmgmts:\\.\root\CIMV2"
$objWMIService = ObjGet($sWMIService)
If IsObj($objWMIService) Then
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor")
If IsObj($colItems) Then
For $oItem In $colItems
$cpu = $oItem.LoadPercentage
Next
Else
MsgBox(16, "Error", "Failed to get collection.")
EndIf
Else
MsgBox(4096, "ERROR", "Failed to connect to WMI at: " & $sWMIService)
EndIf
; CPU Auslastung in Prozent
GUICtrlSetData ($lbl_cpu, "")
GUICtrlSetData ($lbl_cpu, $cpu & " % ")
; Progressbar
GUICtrlSetData($progress_cpu, $cpu)
; Farbe der CPU-Progressbar bestimmen
If $cpu < 70 Then
GUICtrlSetColor($progress_cpu, 0x00FF00) ;grün
Else
GUICtrlSetColor($progress_cpu, 0xFF0000) ;rot
EndIf
EndFunc
#EndRegion RAM ###################################################################################
#Region ENDE ####################################################################################
Func _ende()
Exit
EndFunc
#EndRegion ENDE #################################################################################
Alles anzeigen
Danke schon mal im Voraus für eure Hilfe.
P.S. Ja, ich weiß, dass es schon ein paar Beiträge zu diesen Thema gibt und ja, ich habe google benutzt. Doch wie schon beschrieben bin ich kein Profi und eine Lösung zu meinem Problem habe ich bisher nicht finden können.
Gruß,
Christian