Monitor Überwachen

  • Hallo,

    ich habe wieder mal was vor daher brauche ich ein paar Tipps
    Ich brauche fürs Monitoring bei mir eine lösung

    Ich habe etwa 20 Monitore wo diverse Anwendungen gemonitort werden wenn ein Ereignis auf den 20 Pc passiert "also eine grafische änderung bzw wenn ein farbwechsel statffindet" dann will ich ein Tray oder MSG box auslösen.

    Die rechner liste würde ich über eine ini datei einlesen.

    Würde für jeden Vorschlag dankbar sein.

    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Ich hätte da ne Idee.
    Screenshot.
    Nach 10 Sekunden noch einen!
    Per PixelCheckSum vergleichen ob die Bilder gleich sind.
    Wenn NICHT dann TCP Send an deinen PC.
    Mit nem "Empfangsskript" Dann eine MSgBox anzeigen lassen, wenn ein TCP Send eingeht.
    Habe leider gerade keine Zeit. Sonst hätte ich ein Beispiel geskriptet =P

  • Hey,

    hat jemand noch einen vorschlag??
    Oder ein beispiel für PokerFace seine idee?

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Ich würde eher eine Art "Miniatur Board" machen.

    1. Auf den Pc's jeweils Scripte laden die alle x sec einen Screen
    machen und diese an einen Server senden oder halt über Lan etc.

    2. Auf dem Hauptrechner eine GUI die immer die aktuellen Screens
    verkleinert darstellt. Und z.b. mit farbigen "Overlays" darstellen
    ob sich etwas verändert hat. Geht wie oben gesagt über Pixelsearchsum.

  • Hört sich ja auch ni cht schlecht an

    aber weiss garnicht wie ich anfangen soll ??

    Ein vorschlag mit Beispiel Script?
    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    • Offizieller Beitrag

    Die Screenshot Methode ist ja nicht schlecht. Da darf aber auf dem ausführenden Ps´s keine Uhr oder Irgendein Programm laufen, das den Bilschirminhalt ändert.
    Zumindest sollte dann der Screenshot begrenzt angefertigt werden, z.B. ohne die Startleiste.

  • Hallo SubZero,
    Ich habe hier mal eine Möglichkeit zusammengebastelt :rolleyes:
    Die Kommentare im Skript erklären was du noch brauchst !

    Spoiler anzeigen
    [autoit]

    HotKeySet ("+!o", "_OL")
    HotKeySet ("+!u", "_UR")
    HotKeySet ("+!b", "_Exit")

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

    Global $StatusMausOben = False
    Global $StatusMausUnten = False

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

    MsgBox (0, "Info", "Nach schließen der Msg-Box bitte die Maus auf den OBEREN linken Punkt des Screen-Shot-Bereiches setzen und SHIFT+ALT+O drücken."&@CRLF&"Dann bitte die Maus auf den UNTEREN rechten Punkt des Screen-Shot-Bereiches setzen und SHIFT+ALT+U drücken!")

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

    While 1
    If $StatusMausOben = True AND $StatusMausUnten = True Then
    Global $PixelChecksumAlt = PixelChecksum ($ObenLinksX, $ObenLinksY, $UntenRechtsX, $UntenRechtsY)
    ExitLoop
    EndIf
    Sleep (100)
    WEnd

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

    While 1
    Global $PixelChecksumNeu = PixelChecksum ($ObenLinksX, $ObenLinksY, $UntenRechtsX, $UntenRechtsY)
    If $PixelChecksumAlt <> $PixelChecksumNeu Then
    _SendAlarm()
    EndIf
    Sleep (1000)
    WEnd

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

    Func _OL()
    Global $MausOben = MouseGetPos()
    Global $ObenLinksX = $MausOben[0]
    Global $ObenLinksY = $MausOben[1]
    Global $StatusMausOben = True
    EndFunc

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

    Func _UR()
    Global $MausUnten = MouseGetPos()
    Global $UntenRechtsX = $MausUnten[0]
    Global $UntenRechtsY = $MausUnten[1]
    Global $StatusMausUnten = True
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _SendAlarm() ;Hier sollte dann TCP Send an deinen Haupt Computer rein! Und dieser Haupt Computer braucht einfach ein Skript zum empfangen!
    MsgBox (0, "", "Es hat sich was getan!")
    EndFunc

    [/autoit]

    Bitte schön !
    Bei mir klappt es einwandfrei :P
    Ist natürlich nicht fehlerfrei.
    Viele Möglichkeiten, die ein Problem machen könnten sind noch nicht gelöst.
    Ich möchte dir aber bei deinem Proekt helfen :rolleyes:
    Also falls du Hilfe brauchst :)


    :thumbup:

  • *Push*
    Für SubZero ^^

    Hier dein Skript sehr gut kommentiert :thumbup:

    Spoiler anzeigen
    [autoit]

    ;So ich hoffe dies hilft dir etwas.
    ;Ist eigentlich alles ganz logisch aufgebaut.
    ;Bei Problemen:
    ;Feel free to ask !
    ;Mit freundlichen Grüßen
    ;Benne

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

    HotKeySet ("+!o", "_OL")
    HotKeySet ("+!u", "_UR")
    HotKeySet ("+!b", "_Exit")
    ;Die Hotkeys für die Funktionen, denn am Anfang muss das Viereck bestimmt werden, welcher Bildschirmteil "gecheckt" werden soll!

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

    Global $StatusMausOben = False
    Global $StatusMausUnten = False
    ;Zur Abfrage, ob der jeweilige Punkt bestimmt wurde! Deswegen False.. Wird nachher auf True geschaltet.

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

    MsgBox (0, "Info", "Nach schließen der Msg-Box bitte die Maus auf den OBEREN linken Punkt des Screen-Shot-Bereiches setzen und SHIFT+ALT+O drücken."&@CRLF&"Dann bitte die Maus auf den UNTEREN rechten Punkt des Screen-Shot-Bereiches setzen und SHIFT+ALT+U drücken!")
    ;Diese MsgBox zeigt dir, was du machen musst!

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

    While 1 ;Durch diese Schleife wird gewartet, bist der User das Viereck definiert hat, in denen der Checksum ausgeführt werden soll.
    If $StatusMausOben = True AND $StatusMausUnten = True Then ;Wenn beide Hotkeys gedrückt wurden dann:
    Global $PixelChecksumAlt = PixelChecksum ($ObenLinksX, $ObenLinksY, $UntenRechtsX, $UntenRechtsY);Den Standart "zustand" des Monitors auslesen.
    ExitLoop;Dann soll auch die erste Schleife verlassen werden und zur zweiten Übergegangen werden
    EndIf
    Sleep (100) ;Damit die CPU last nicht zu groß ist ;)
    WEnd

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

    While 1 ; Diese Schleifeprüft, ob das Bild was wir oben als Standart bestimmt haben, sich irgendwie verändert!
    Global $PixelChecksumNeu = PixelChecksum ($ObenLinksX, $ObenLinksY, $UntenRechtsX, $UntenRechtsY) ;Der bestimmte Bereich (Durch die Hotkeys) wird nocheinmal geprüft, ob sich etwas verändert hat
    If $PixelChecksumAlt <> $PixelChecksumNeu Then ; Wenn beide Pixel Checksum UNTERSCHIEDLICH sich, wird eine Funktion aufgerufen. Wenn nicht, läuft die Schleife weiter.
    _SendAlarm()
    EndIf
    Sleep (1000); Jede Sekunde ein Check. Kann man beliebig vergrößern, bzw. veringern!
    WEnd

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

    ;So nun zu den Funktionen
    Func _OL()
    Global $MausOben = MouseGetPos() ;Wenn man die Taste drückt, wird die Mausposition ausgelesen, um das Viereck des Pixelchecks zu bekommen
    Global $ObenLinksX = $MausOben[0];Aus MouseGetPos() geht ein 2d Array aus. X Koordinate
    Global $ObenLinksY = $MausOben[1];Aus MouseGetPos() geht ein 2d Array aus. Y Koordinate
    Global $StatusMausOben = True ;Wenn die Funktion durchgelaufen ist, dann wird der Status auf True gesetzt. (Oben wird ja abgefragt, ob der Status auf True ist)
    EndFunc

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

    Func _UR()
    Global $MausUnten = MouseGetPos() ;Das selbe in Grün :P
    Global $UntenRechtsX = $MausUnten[0];X Koordinate
    Global $UntenRechtsY = $MausUnten[1];Y Koordinate
    Global $StatusMausUnten = True ;Der Status = True
    EndFunc

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

    Func _Exit() ; Mit dem Hotkey SHIFT-ALT-B beenden wir das Programm , indem diese Funktion aufgerufen wird.
    Exit
    EndFunc

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

    Func _SendAlarm() ;Hier sollte dann TCP Send an deinen Haupt Computer rein! Und dieser Haupt Computer braucht einfach ein Skript zum empfangen!
    MsgBox (0, "", "Es hat sich was getan!") ;Jede x-beliebige Aktion kann hier herein!
    EndFunc

    [/autoit]

    Ich hoffe es hilft dir nun!
    Edit: Evtl. können andere es auch noch gebrauchen :P