Hi Leute,
ich widme mich mal wieder dem leidigen Thema eine Progressbar zu platzieren.
Folgendes möchte ich:
- Ich habe ein GUI in dem ein Rechnername zum Abfragen eingetragen werden kann.
- Nach dem Klick auf den Button Abfragen durchläuft eine While-Schleife diverse Funktionen die mir Informationen zu verschiedenen Rechnern ausgeben
- diese erscheinen dann nach und nach in dem GUI
nun soll das Ganze noch durch eine ProgressBar aufgewertet werden, damit der Nutzer auch weiß, wann die Abfrage fertig ist.
Ist es möglich, jede Funktion am Ende einen Wert an die Progressbar zu übergeben der die Funktion sozusagen "fertig" meldet?
Wenn ja wie?
Ich brauche auch keine Zeiten oder geschätzte Dauer sondern wirklich eine jeweilige Rückmeldung wenn eine Funktion fertig ist.
Die letzte Funktion übermittelt dann quasi das Ende und danach soll die Progressbar schließen.
Hab das Netzt und das Forum hier schon durchsucht aber nichts für meinen Zweck gefunden was mich zufrieden stellt
Hab bis jetzt nur sloppy-Code und schmeiße den mal hier rein:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
#include <Inet.au3>
#include <WinAPI.au3>
#include <Math.au3>
#Region ### START Koda GUI section ### Form=C:\Users\Documents\AutoIt\RechnerUptime\Form1.kxf
$Form1 = GUICreate("Form1", 615, 437, 200, 129)
$Group1 = GUICtrlCreateGroup("Eingaben", 16, 8, 577, 57)
global $iComputer = GUICtrlCreateInput("WDEST1987", 120, 32, 121, 22, BitOR($ES_CENTER,$ES_UPPERCASE))
GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
$Label1 = GUICtrlCreateLabel("Rechnername:", 34, 32, 82, 18)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
$go = GUICtrlCreateButton("Abfragen", 248, 32, 75, 25)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
;$Progress1 = GUICtrlCreateProgress(336, 32, 241, 17, BitOR($PBS_SMOOTH,$WS_BORDER))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Rechnerinformationen", 16, 80, 577, 345)
;GUICtrlSetFont(-1, 9, 400, 0, "Calibri")
;#################___ Rechnername ___#################
$Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -16, 32, 104, 32, 32)
$Label2 = GUICtrlCreateLabel("Rechnername:", 72, 112, 82, 18)
$lRechnername = GUICtrlCreateLabel("Rechnername", 168, 112, 100, 18)
;#################___ Letzter Start ___#################
$Icon2 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -28, 32, 144, 32, 32)
$Label4 = GUICtrlCreateLabel("Letzter Start:", 72, 152, 70, 18)
$lLetzter_Start = GUICtrlCreateLabel("Letzter Start", 168, 152, 300, 18)
;#################___ Uptime ___#################
$Icon3 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -22, 32, 184, 32, 32)
$Label6 = GUICtrlCreateLabel("Uptime:", 72, 192, 47, 18)
$lUptime = GUICtrlCreateLabel("Uptime", 168, 192, 300, 18)
;#################___ IP-Adresse ___#################
$Icon4 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -222, 32, 224, 32, 32)
$Label8 = GUICtrlCreateLabel("IP-Adresse:", 72, 232, 65, 18)
$lIPAdresse = GUICtrlCreateLabel("Label9", 168, 232, 300, 18)
;#################___ Arbeitsspeicher ___#################
$Icon5 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -13, 32, 264, 32, 32)
$Label10 = GUICtrlCreateLabel("Arbeitsspeicher:", 72, 272, 93, 18)
$lArbeitsspeicher = GUICtrlCreateLabel("Label11", 168, 272, 300, 18)
;#################___ Prozessor ___#################
$Icon6 = GUICtrlCreateIcon("C:\Windows\System32\imageres.dll", -145, 32, 304, 32, 32)
$Label12 = GUICtrlCreateLabel("Prozessor:", 72, 312, 59, 18)
$lProzessor = GUICtrlCreateLabel("Label13", 168, 312, 450, 24)
;#################___ Betriebssystem ___#################
$Icon7 = GUICtrlCreateIcon("C:\Windows\System32\imageres.dll", -2, 32, 344, 32, 32)
$Label14 = GUICtrlCreateLabel("Betriebssystem:", 72, 352, 91, 18)
$lBetriebssystem = GUICtrlCreateLabel("Label15", 168, 352, 350, 24)
;#################___ Serial ___#################
$Icon8 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -45, 32, 384, 32, 32)
$Label16 = GUICtrlCreateLabel("Serial:", 72, 392, 39, 18)
$lSerialNumber = GUICtrlCreateLabel("Label17", 168, 392, 300, 18)
;#################___ Rechnermodell ___#################
$Icon9 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -208, 336, 104, 32, 32)
$Label18 = GUICtrlCreateLabel("Rechnermodell:", 376, 112, 90, 18)
$lModell = GUICtrlCreateLabel("Label19", 480, 112, 300, 18)
;#################___ Hersteller ___#################
$Icon10 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -208, 336, 144, 32, 32)
$Label20 = GUICtrlCreateLabel("Hersteller:", 376, 152, 62, 18)
$lHersteller = GUICtrlCreateLabel("Label19", 480, 152, 300, 18)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While true
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $go
local $start = 0, $iEnd = 0, $iHours = 0, $iMins = 0, $iSecs = 0
ProgressOn("Status der Abfrage", "Abfrage läuft...", "", 350, 350, 0)
$start = TimerInit()
$GesamtDauer = _TicksToTime($iEnd, $iHours, $iMins, $iSecs)
for $i = 1 to $GesamtDauer Step 1
$iPercent = Int($i / $GesamtDauer * 100)
ProgressSet($iPercent, $i & "/" & $GesamtDauer & @TAB & "(" & $iPercent & "%)")
next
$sComputer = GuiCtrlRead($iComputer)
_Uptime($sComputer)
GetMemWMI($sComputer)
_LowMetricIP($sComputer)
CheckCPU($sComputer)
getOS($sComputer)
getSerialNumber($sComputer)
Modell($sComputer)
Hersteller($sComputer)
ProgressSet($iPercent, "Completed!")
ProgressOff()
EndSwitch
WEnd
Func _Uptime($sComputer)
$iPing = Ping($sComputer, 500)
If Not $iPing Then Return "Rechner nicht erreichbar/offline"
$oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
If Not IsObj($oWMIService) Then Return "Fehler beim Verbinden (Admin-PC)"
$oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
For $oOS In $oColOperatingSystems
Local $sBootup = $oOS.LastBootUpTime
Local $sLastBootupTime = __WMIDateStringToDate($sBootup)
Next
$oColOperatingSystems = 0
$oWMIService = 0
Local $sUpTime = __FormatUptime($sLastBootupTime)
GUICtrlSetData($lLetzter_Start, __WMIDateStringToDate($sBootup))
GUICtrlSetData($lRechnername, $sComputer)
;Return "Rechnername: " & $sComputer & @CRLF & "Last Boot: " & $sLastBootupTime & @CRLF & "Uptime: " & $sUpTime & @CRLF & "IP-Adresse: "
EndFunc ;==>_Uptime
Func GetMemWMI($sComputer)
;~ ConsoleWrite("Abfrage startet..." & @CRLF)
;~ Local $sLogFileOS = @ScriptDir & "\" & "Arbeitsspeicher" & "_Stand_" & @YEAR & @MON & @MDAY & ".txt"
;~ Local $hOpenLFileOS = FileOpen($sLogFileOS, $FO_Append)
Local $mem, $colItems, $colItem, $ping, $x
Local $sError1 = $sComputer & ";Error 1: " & ";Host ist Offline" & @CRLF
Local $sConsoleError1 = $sComputer & " Error 1: " & "Host ist Offline" & @CRLF
Local $sError2 = $sComputer & ";Error 2: " & ";Host nicht erreichbar" & @CRLF
Local $sConsoleError2 = $sComputer & " Error 2: " & "Host nicht erreichbar" & @CRLF
Local $sError3 = $sComputer & ";Error 3: " & ";Bad destination" & @CRLF
Local $sConsoleError3 = $sComputer & " Error 3: " & "Bad destination" & @CRLF
Local $sError4 = $sComputer & ";Error 4: " & ";Kein Zugriff" & @CRLF
Local $sConsoleError4 = $sComputer & " Error 4: " & "Kein Zugriff" & @CRLF
$ping = Ping($sComputer, 500)
$mem = ''
Switch @error
Case 1
;MsgBox(64, @error, "Host is offline")
;~ FileWriteLine($hOpenLFileOS, $sError1)
;~ ConsoleWrite($sConsoleError1)
Case 2
;MsgBox(64, @error, "Host is unreachable")
;~ FileWriteLine($hOpenLFileOS, $sError2)
;~ ConsoleWrite($sConsoleError2)
Case 3
;MsgBox(64, @error, "Bad destination")
;~ FileWriteLine($hOpenLFileOS, $sError3)
;~ ConsoleWrite($sConsoleError3)
Case 4
;MsgBox(64, @error, "Other errors")
;~ FileWriteLine($hOpenLFileOS, $sError4)
;~ ConsoleWrite($sConsoleError4)
Case Else
;~ ConsoleWrite($sComputer & " Ping: " & $ping & @CRLF)
$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sComputer & "\root\cimv2")
If IsObj($objWMIService) Then
$colItems = $objWMIService.ExecQuery("Select Capacity from Win32_PhysicalMemory", "WQL", 0x30)
For $objItem In $colItems
$mem += $objItem.Capacity
Next
;~ MsgBox(0,"", $mem)
$sResultMem = $sComputer & " verfügt über: " & Round($mem / 1024 ^ 3, 2) & " GB" & @CRLF
;~ ConsoleWrite($sComputer & " Arbeitsspeicher: " & Round($mem / 1024 ^3, 2) & " GB" & @CRLF)
;~ FileWriteLine($hOpenLFileOS, $sComputer & " Arbeitsspeicher: " & Round($mem / 1024 ^3, 2) & " GB")
Else
$sResultMem = "Recher nicht erreichbar"
;~ ConsoleWrite($sComputer & " Rechner nicht ABFRAGBAR" & @CRLF)
;~ FileWriteLine($hOpenLFileOS, $sComputer & " Rechner nicht ABFRAGBAR" & @CRLF)
EndIf
EndSwitch
;~ FileClose($hOpenLFileOS)
;~ ConsoleWrite("Abfrage ende!" & @CRLF)
GUICtrlSetData($lArbeitsspeicher, $sResultMem)
EndFunc ;==>GetMemWMI
Func _LowMetricIP($sHost = $sComputer)
Local $objAdapter, $iMetric = 500, $sActualIP
Local $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sHost & "\root\cimv2")
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
Local $colAdapter = $objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
If IsObj($colAdapter) Then
For $objAdapter In $colAdapter
If $objAdapter.IPConnectionMetric < $iMetric And IsString($objAdapter.DefaultIPGateway(0)) Then ; ggf. kann auch die Gateway-Prüfung entfallen !
$sActualIP = $objAdapter.IPAddress(0)
$iMetric = $objAdapter.IPConnectionMetric
EndIf
Next
GUICtrlSetData($lIPAdresse, $sActualIP)
If $sActualIP Then Return $sActualIP
EndIf
Return SetError(2, 0, 0)
EndFunc ;==>_LowMetricIP
Func CheckCPU($sComputer)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$objWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$CPUSpeed = $objItem.CurrentClockSpeed
Next
EndIf
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Cores = $objItem.NumberOfLogicalProcessors
Next
Else
$Cores = "Konnte nicht ermittelt werden."
EndIf
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Processors = $objItem.NumberOfCores
Next
Else
$Processors = "Konnte nicht ermittelt werden."
EndIf
GUICtrlSetData($lProzessor, "Kerne: " & $Cores & @CRLF & "Prozessor"&"(en)"&": " & $Processors & " je " & Ceiling($CPUSpeed) / 1000 & " Ghz")
;Return "Kerne: " & $Cores & @CRLF & "Taktung: " & @CRLF & "Prozessor: " & $Processors & @CRLF & Ceiling($CPUSpeed) / 1000 & " Ghz"
EndFunc ;==>CheckCPU
Func getOS($sComputer)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = $sComputer
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$OS = $objItem.Name
Next
EndIf
GUICtrlSetData($lBetriebssystem, $OS)
Return "OS: " & $OS
EndFunc ;==>getOS
Func getSerialNumber($sComputer)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = $sComputer
$Output = ""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
;~ $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$aBIOS = $objWMIService.ExecQuery("Select * from Win32_BIOS")
For $element In $aBIOS
$SerialNumber = $element.SerialNumber
Next
GUICtrlSetData($lSerialNumber, $SerialNumber)
Return "Seriennummer: " & $SerialNumber
EndFunc ;==>getSerialNumber
Func Modell($sComputer)
$strComputer = $sComputer
$aComputer = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2").ExecQuery("SELECT Model FROM Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Model
GUICtrlSetData($lModell, $aComputer)
Return "Modell: " & $aComputer
EndFunc ;==>Abutze
Func Hersteller($sComputer)
local $iHours, $iMins, $iSecs
$strComputer = $sComputer
$sHersteller = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2").ExecQuery("Select Name, Manufacturer, Model from Win32_ComputerSystem", "WQL", 0).ItemIndex(0).Manufacturer
GUICtrlSetData($lHersteller, $sHersteller)
Global $iEnd = TimerDiff($start)
Return "Hersteller: " & $sHersteller
EndFunc ;==>Hersteller
Func __WMIDateStringToDate($sBootup)
Return StringLeft($sBootup, 4) & "/" & StringMid($sBootup, 5, 2) & "/" & StringMid($sBootup, 7, 2) & " " & StringMid($sBootup, 9, 2) & ":" & StringMid($sBootup, 11, 2) & ":" & StringMid($sBootup, 13, 2)
EndFunc ;==>__WMIDateStringToDate
Func __FormatUptime($sLastBootupTime)
Local $aDateDiffs = [[0, 24, " day"], [0, 60, " hour"], [0, 60, " minute"], [0, 1, " second"]]
Local $aDateDiff = StringSplit("D|h|n|s", "|")
Local $sNow = _NowCalc()
For $sDiff = 1 To $aDateDiff[0]
$aDateDiffs[$sDiff - 1][0] = _DateDiff($aDateDiff[$sDiff], $sLastBootupTime, $sNow)
Next
Local $iUbound = UBound($aDateDiffs) - 1
For $iX = $iUbound To 0 Step -1
If $iX > 0 Then
If $aDateDiffs[$iX - 1][0] > 0 Then $aDateDiffs[$iX][0] = ($aDateDiffs[$iX][0] - ($aDateDiffs[$iX - 1][0] * $aDateDiffs[$iX - 1][1]))
EndIf
Next
Local $sUpTime = ""
For $iX = 0 To $iUbound
If $aDateDiffs[$iX][0] > 0 Then
$sUpTime &= $aDateDiffs[$iX][0] & $aDateDiffs[$iX][2]
If $aDateDiffs[$iX][0] > 1 Then $sUpTime &= "s"
If $iX < $iUbound Then $sUpTime &= ", "
EndIf
Next
GUICtrlSetData($lUptime, $sUpTime)
Return $sUpTime
EndFunc ;==>__FormatUptime
Alles anzeigen