Hallo,
ich nutze eine "gefundene" und konvertierte .VBS-Funktion, um Rechnername/IP in meiner ListView anzupingen und je nach Status auf online/offline zu setzen (grün/rot).
Allerdings "blockiert" mir diese das ganze Programm, bis es durch die ~300 Rechner ist - schätzungsweise 1-2 Sekunden pro Offline-Rechner.
Geht das igendwie im Hintergrund bzw. von mir aus auch schneller??
p.s. das mit dem temp-File auslesen unten habe ich schon mal versucht durch das stdio-einlesen zu ersetzen, ist also nur eine andere Variante..
Spoiler anzeigen
Func _IPTest()
GUICtrlSetState($ButIPScan, $GUI_DISABLE)
For $i = 0 to $iAnzahlPC-1
$RDP = _GUICtrlListView_GetItemText($LVPC, $i)
;ConsoleWrite($rdp & @CRLF)
if IsConnectible($RDP) = 1 Then
_GUICtrlListView_SetItemImage( $LVPC, $i, 2)
Else
_GUICtrlListView_SetItemImage( $LVPC, $i, 0)
EndIf
Next
GUICtrlSetState($ButIPScan, $GUI_ENABLE)
EndFunc
Func IsConnectible($sHost, $iPings=2, $iTO=150)
[/autoit] [autoit][/autoit] [autoit]If $iPings = "" Then $iPings = 2
If $iTO = "" Then $iTO = 150
Const $OpenAsDefault = -2
Const $FailIfNotExist = 0
Const $ForReading = 1
Local $oShell = ObjCreate("WScript.Shell")
Local $oFSO = ObjCreate("Scripting.FileSystemObject")
Local $sTemp = $oShell.ExpandEnvironmentStrings("%TEMP%")
Local $sTempFile = $sTemp & "\runresult.tmp"
$oShell.Run( "%comspec% /c ping -n " & $iPings & " -w " & $iTO & " " & $sHost & ">" & $sTempFile, 0 , True)
[/autoit] [autoit][/autoit] [autoit]Local $fFile = $oFSO.OpenTextFile($sTempFile, $ForReading, $FailIfNotExist, $OpenAsDefault)
[/autoit] [autoit][/autoit] [autoit]Local $sResults = $fFile.ReadAll
$fFile.Close
$oFSO.DeleteFile($sTempFile)
If StringInStr($sResults,"TTL=") Then
Return 1
Else
Return 0
EndIf
EndFunc