Online Rechner im Netzwerk mittels Ping

  • Hallo :)
    ich habe ein kleines Script geschrieben gehabt, welches einen bestimmten Range im Ip Netzwerk anpingt und ausgiebt ob die Rechner on oder off sind. Funktioniert auch bisher soweit (bisher nur für 192.168.XXX.XXX gedacht), jedoch komme ich beim GUI noch nicht so mit der Image List klar. Irgendwie hat die ganze Liste immer eine Farbe und ist nicht abhängig von On (grün) oder off (rot).

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiIPAddress.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hImage
    Global $hListView

    [/autoit] [autoit][/autoit] [autoit]

    ;~ GUI
    $Form1 = GUICreate("Vergebene IP Adressen", 328, 438, 192, 124)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Beschriftungen
    $Label1 = GUICtrlCreateLabel("Range", 32, 8, 108, 17)
    $Label2 = GUICtrlCreateLabel("bis", 155, 24, 28, 17)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ IP-Adressen
    $IPAddress1 = _GUICtrlIpAddress_Create($Form1, 32, 24, 105, 17)
    _GUICtrlIpAddress_Set($IPAddress1, "192.168.178.15")
    $IPAddress2 = _GUICtrlIpAddress_Create($Form1, 185, 24, 105, 17)
    _GUICtrlIpAddress_Set($IPAddress2, "192.168.178.25")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Liste
    $hListView = _GUICtrlListView_Create($Form1, "", 32, 96, 257, 305)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Buttons
    $Start = GUICtrlCreateButton("Start", 32, 56, 105, 25)
    $Stop = GUICtrlCreateButton("Stop", 184, 56, 105, 25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_InsertColumn($hListView, 0, "Status", 20)
    _GUICtrlListView_InsertColumn($hListView, 1, "IP",140 )
    _GUICtrlListView_InsertColumn($hListView, 2, "Status", 70)

    [/autoit] [autoit][/autoit] [autoit]

    $msg=0

    [/autoit] [autoit][/autoit] [autoit]

    While $msg <> $GUI_EVENT_CLOSE

    $msg = GUIGetMsg()


    If $msg = $Start Then

    $IP1 = _GUICtrlIpAddress_GetArray($IPAddress1)
    $IP2 = _GUICtrlIpAddress_GetArray($IPAddress2)
    Local $count=0
    While $IP1[3]<=$IP2[3]
    $Ipscan = $IP1[0]& "."& $IP1[1]&"."&$IP1[2]&"."&$IP1[3]
    $ping = Ping(""& $IPscan, 20)
    $hImage = _GUIImageList_Create()
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    If $ping = 0 Then
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    _GUICtrlListView_AddItem($hListView, "", 0)
    _GUICtrlListView_AddSubItem($hListView, $count , "" & $IPscan, 1)
    _GUICtrlListView_AddSubItem($hListView, $count , "offline", 2)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Else
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    _GUICtrlListView_AddItem($hListView, "" , 0)
    _GUICtrlListView_AddSubItem($hListView, $count , "" & $IPscan, 1)
    _GUICtrlListView_AddSubItem($hListView, $count , "online", 2)

    EndIf

    $IP1[3] = $IP1[3]+1
    $count = $count+1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]


    EndIf
    WEnd
    Exit

    [/autoit]

    Bitte peinigt mich nicht gleich wenn ich ganz schlecht geschrieben haben :X Ich habe auch ein wenig aus den Hilfedateien zusammengestückelt. Jeder Anfang ist schwer ^^

    Grüße

    Einmal editiert, zuletzt von CMX (4. Oktober 2013 um 20:01)

  • Ist mir auch gerade aufgefallen, dass ich im falschen Bereich bin :huh: Entschuldigung. Vielleicht könnte ein Admin das bitte verschieben.
    Alles klar, ändere ich noch :)

  • Versuch mal die Farbe mittels

    [autoit]

    GUICtrlSetBkColor($var, 0x00FF00)

    [/autoit]

    zu machen
    Das sollte gehen.
    Dafür musst du jedem Item eine Variable zuordnen

    [autoit]

    $var = _GUICtrlListView_AddSubItem

    [/autoit]


    (Am besten geht das mirt einem Array)

  • Dein Fehler ist glaube ich, dass erst alle "Bilder" in die ImageList eingetragen werden müssen.
    Ich hab mal sleeps eingebaut und es hat sich herausgesellt, dass das erste Item auch rot war, so wie es soll, und sich zusammen mit dem zweiten grün gefärbt hat.
    Also musst du erst alle anpingen, und die richtige Farbe in die Liste eintragen.

    [autoit]

    $hImage = _GUIImageList_Create()
    ;Schleifnanfang
    ;Ping
    ;If
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap(GUICtrlGetHandle($hListView), 0x00FF00, 16, 16))
    ;else
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap(GUICtrlGetHandle($hListView), 0xFF0000, 16, 16))
    ;endif
    ;Schleifenende
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

    [/autoit]


    und dann in einer anderen Schleife die Items hinzufügen. (Am besten du speicherst vorher jeden einzelnen Status in einen Array, damit du noch weißt, wer on/off war)