1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Code4Fun

Beiträge von Code4Fun

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 29. April 2019 um 14:21

    Habe mein Problem gefunden. Musste die Zeile auf If $iAlarmCounter <> 2 Then ändern, dann läuft das auch rein, wenn $iAlarmCounter = 1 ist. Frage ich eigentlich den @error falsch ab? Der GUISetState geht jetzt, aber bei der Zeile ConsoleWrite("Rückgabe von @error nachdem GUI aktualisiert wurde: " & @error & @CRLF & @CRLF) bekomme ich immer noch eine 0 als Ergebnis. Laut Hilfe ist aber 0 = Fehler.

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 29. April 2019 um 13:41

    Den Toleranzpart habe ich mal eingebaut. Der scheint auch zu funktionieren. Den Teil mit den "anderen" Farben muss ich noch machen. Aktuell habe ich das Problem, das sich meine GUI in Zeile 157 nicht aktualisiert. Zeile 158 protokolliert eine "0". Das versteht ich jetzt nicht ganz.

    Code
    Python
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <Sound.au3>
    #include <TrayConstants.au3>
    ; mit der While Wend Schleife stimmt noch was nicht. checken.
    
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    #include <MsgBoxConstants.au3>
    #include <TrayConstants.au3>
    #include <Sound.au3>
    #include <GUIConstantsEx.au3>
    
    #EndRegion ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    
    #Region ; Script Kopf
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version:     3.3.14.5
        Author:             Code4Fun
    
        Script Function:     Das Script scannt einen bestimmten Bereich auf dem Monitor. Dieser Bereich zeigt ein webbasiertes Servermonitoring.
        Im Normalfall ist dort die Farbe grün = OK
        Wenn es auf orange oder rot wechselt, soll dieses Script hier später einen aktustischen Alarm auslösen.
    
        Erstellungendatum: vom 25.04.2019
    
        Änderungsdatum:
    
        Version: 0.0.1.0
    
        History:
    
        0.0.1: Initialerstellung
    
    #ce ----------------------------------------------------------------------------
    #EndRegion ; Script Kopf
    
    #Region ; AutoIt-Spezifischen Optionen
    
    Opt("GUICloseOnESC", 1) ; Wenn man die ESC Taste drückt, wird die GUI geschlossen, da eine $GUI_EVENT_CLOSE Nachricht gesendet wird
    Opt("MustDeclareVars", 1) ; Variablen (Dim / Global / Local / Const) müssen deklariert sein. Wichtig für Fehlersuche
    Opt("TrayIconDebug", 1) ; Zeigt die aktuelle Skriptzeile im Trayicon Tipp um das Debugging zu unterstützen
    
    Global $exititem, $sFarbe, $hGUI, $idButton, $sLocation, $sLabel
    Global $iAlarmCounter = 0
    
    #EndRegion ; AutoIt-Spezifischen Optionen
    
    AdlibRegister(_PixelbereichScannen, 3000) ; alle x Sekunden wird diese Funktion aufgerufen.
    
    
    ;Tray-Menü anpassen
    Opt("TrayAutoPause", 0) ; Script will not be paused when clicking the tray icon.
    Opt("TrayOnEventMode", 1)
    Opt("TrayMenuMode", 1 + 2)
    
    $exititem = TrayCreateItem("Beenden")
    TrayItemSetState(-1, $TRAY_UNCHECKED)
    TrayItemSetOnEvent(-1, "_Exit")
    TraySetState()
    
    #Region ; GUI Erstellung - nur ein erstes Beispiel
    $hGUI = GUICreate("A L A R M", @DesktopWidth - 100, @DesktopHeight - 100, -1, -1, 0x0) ; erstelle die GUI
    $sLabel = GUICtrlCreateLabel("KEIN ALARM", 600, 100, 600, 200) ; schreibe diesen Text als Label
    GUICtrlSetFont($sLabel, 50, 900) ; setze den Font
    $idButton = GUICtrlCreateButton("OK", 700, 400, 150, 150) ; erstelle OK Button.
    GUICtrlSetFont($idButton, 50, 900) ; setze den Font
    GUISetState(@SW_HIDE, $hGUI) ; verstecke die GUI
    #EndRegion ; GUI Erstellung - nur ein erstes Beispiel
    
    #Region ; Hauptschleife
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $idButton ; wenn OK Button gedrückt wird ..
                _OKpressed()
        EndSwitch
    WEnd
    #EndRegion ; Hauptschleife
    
    #Region ; Funktionen
    Func _PixelbereichScannen($sLocation)
        ConsoleWrite("Funktion _PixelbereichScannen Anfang" & @CRLF)
        Local $aCoord
        ; Wenn in den unten stehenden Koordinaten die Farbe grün (0x53A000) zu finden ist, ist alles OK
        ConsoleWrite("$sLocation ist: " & $sLocation & @CRLF)
        If $sLocation = "GP" Then
            $aCoord = PixelSearch(-2833, 835, -2771, 872, 0x53A000, 50, 3)
        Else
            $aCoord = PixelSearch(-1225, 820, -1146, 866, 0x53A000, 50, 3)
        EndIf
        If Not @error Then ; wenn alles OK ist dann
            $iAlarmCounter = 0 ; setze Counter wieder zurück auf 0
            ConsoleWrite("$iAlarmCounter ist: " & $iAlarmCounter & @CRLF)
        Else
            ;ConsoleWrite("Kein Treffer bei OK" & @CRLF)
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe orange (0xFAA732) zu finden ist, ist Warnstufe 1 angesagt
        If $sLocation = "GP" Then
            $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xFAA732, 50, 3)
        Else
            $aCoord = PixelSearch(-1225, 820, -1146, 866, 0xFAA732, 50, 3)
        EndIf
        If Not @error Then ; wenn oranger Alarm ausgelöst wurde, dann
            ConsoleWrite("Oranger Alarm" & @CRLF) ; schreibe es in die Console
            _ProblemKnopf("orange") ; führe Function aus
        Else
            ;ConsoleWrite("Kein Treffer bei orangener Alarm" & @CRLF)
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe rot (0xA00000) zu finden ist, ist Warnstufe 2 angesagt
        If $sLocation = "GP" Then
            $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xA00000, 50, 3)
        Else
            $aCoord = PixelSearch(-1225, 820, -1146, 866, 0xA00000, 50, 3)
        EndIf
        If Not @error Then
            ConsoleWrite("Roter Alarm" & @CRLF)
            _ProblemKnopf("rot") ; führe Function aus
        Else
            ;ConsoleWrite("Kein Treffer bei rotem Alarm" & @CRLF)
        EndIf
        ConsoleWrite("Funktion _PixelbereichScannen Ende" & @CRLF)
    EndFunc   ;==>_PixelbereichScannen
    
    Func _ProblemKnopf($sFarbe)
        ConsoleWrite("Funktion _ProblemKnopf Anfang" & @CRLF)
        ConsoleWrite("$iAlarmCounter ist: " & $iAlarmCounter & @CRLF)
        If Not $iAlarmCounter = 2 Then ; Wenn der Counter 0 oder 1 ist, dann gehe in die IF Schleife, wenn der Counter 2 ist (es wurde bereits OK gedrückt), dann bleib draußen.
    
            Local $sLabel
            ConsoleWrite("$iAlarmCounter ist: " & $iAlarmCounter & @CRLF)
            If $iAlarmCounter = 0 Then ; wenn der Counter 0 ist, erstelle die GUI nur einmal
                $iAlarmCounter = 1 ; setze Counter auf 1
                ;$hGUI = GUICreate("A L A R M", @DesktopWidth - 100, @DesktopHeight - 100, -1, -1, 0x01000200)
            EndIf ; hier ist der Counter auf 1, d.h. die Oberfläche wird angepasst.
    
            ConsoleWrite("$sFarbe ist: " & $sFarbe & @CRLF)
            If $sFarbe = "orange" Then ; wenn orangener Alarm, dann
                GUISetBkColor(0xFAA732, $hGUI) ; färbe den Hintergrund in Orange ein
            Else ; ansonsten roter Alarm
                GUISetBkColor(0xA00000, $hGUI) ; ansonsten in rote Farbe
            EndIf
    
            If $sFarbe = "orange" Then ; wenn orangener Alarm, dann
                GUICtrlSetData($sLabel, "ORANGENER ALARM") ; schreibe diesen Text als Label
            Else ; ansonsten
                GUICtrlSetData($sLabel, "ROTER ALARM") ; schreibe diesen Text als Label
            EndIf
            GUISetState(@SW_SHOW, $hGUI)
            ConsoleWrite("Rückgabe von @error nachdem GUI aktualisiert wurde: " & @error & @CRLF)
        EndIf
    
        If $sFarbe = "orange" Then ; wenn orangener Alarm, dann
            _PlaySound("orange")
        Else ; ansonsten roter Alarm
            _PlaySound("rot")
        EndIf
        ConsoleWrite("Funktion _ProblemKnopf Ende" & @CRLF)
    EndFunc   ;==>_ProblemKnopf
    
    Func _PlaySound($sFarbe)
        ConsoleWrite("Funktion _PlaySound Anfang" & @CRLF)
        ConsoleWrite("$sFarbe ist: " & $sFarbe & @CRLF)
        Local $aSound, $sound, $tText
        If $sFarbe = "orange" Then ; wenn orangener Alarm, dann
            $aSound = _SoundOpen(@ScriptDir & "\orange.wav")
        Else ; ansonsten roter Alarm
            $aSound = _SoundOpen(@ScriptDir & "\rot.wav")
        EndIf
    
        If @error = 2 Then
            MsgBox($MB_SYSTEMMODAL, "Fehler", "Die Datei existiert nicht.")
            Exit
        ElseIf @extended <> 0 Then
            Local $iExtended = @extended ; Zuweisung, weil @extended nach DllStructCreate() geändert wird
            Local $stText = DllStructCreate("char[128]")
            DllCall("winmm.dll", "short", "mciGetErrorStringA", "str", $iExtended, "struct*", $tText, "int", 128)
            MsgBox($MB_SYSTEMMODAL, "Fehler", "Öffnen fehlgeschlagen." & @CRLF & "Fehlernummer: " & $iExtended & @CRLF & "Fehlerbeschreibung: " & DllStructGetData($stText, 1) & @CRLF & "Beachte: Möglicherweise kann der Sound dennoch korrekt abgespielt werden.")
        Else
    ;~         MsgBox($MB_SYSTEMMODAL, "Erfolgsmeldung", "Die Datei wurde erfolgreich geöffnet.")
        EndIf
        ConsoleWrite("$iAlarmCounter ist: " & $iAlarmCounter & @CRLF)
        If $iAlarmCounter = 1 Then ; Wenn der Counter auf 1 ist, sprich ein Alarm wurde ausgelöst, dann soll der Sound erklingen
            ConsoleWrite("Sound sollte spielen" & @CRLF)
    ;~         _SoundPlay($aSound, 0)
        Else ; wenn der Counter auf 0 oder 2 steht, sprich man hat OK gedrückt, dann soll der Sound ausgehen.
            ConsoleWrite("$Sound sollte aus sein" & @CRLF)
            _SoundClose($sound)
        EndIf
        ConsoleWrite("Funktion _PlaySound Ende" & @CRLF)
    EndFunc   ;==>_PlaySound
    
    Func _OKpressed()
        ConsoleWrite("Funktion _OKpressed Anfang" & @CRLF)
        GUIDelete($hGUI) ; und lösche die GUI
        $iAlarmCounter = 2 ; setze Counter auf 2
        ConsoleWrite("$iAlarmCounter ist: " & $iAlarmCounter & @CRLF)
        ConsoleWrite("Funktion _OKpressed Ende" & @CRLF)
    EndFunc   ;==>_OKpressed
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    #EndRegion ; Funktionen
    Alles anzeigen

    Ich dachte mit GUISetState(@SW_SHOW, $hGUI) erzeugt man einen Refresh der GUI?

    Vermutlich ist es das gleiche, wie ich hier schon mal hatte. Die GUI soll aber halt dann aktualisiert werden, wenn ich einen orangenen oder roten Alarm habe. Das muss doch irgendwie möglich sein.

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 29. April 2019 um 10:47

    Hallo alpines, vielen Dank für die Info. Für den schnellen Test mache ich jetzt mal den "schlampigen Workaround", werde das aber dann zeitnah umbauen.

    Ich habe noch 2 weitere Fragen.

    1.) Ich prüfe ja mit $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xXXXXXX) auf die Existenz eines Farbcodes 0xXXXXXX (wobei hier 0xXXXXXX als Variable für meine anderen Farben zu sehen ist). Im konkreten Fall prüfe ich auf die Farben grün, orange und rot. Wie muss ich denn eine 4. Prüfung schreiben, die mir z.B. eine MsgBox hochpoppt, wenn an diesen Koordinaten eine andere Farbe als diese 3 zu sehen ist. Ich will damit sicherstellen, das ich mein Monitorfenster wieder nach vorne hole, falls ich es mal temporär mit einem anderen Fenster überdeckt habe.

    2.) Ich habe ursprünglich mal den Wert 0xFAA731 eingegeben. Jetzt bin ich in einer anderen Lokation, wo der LCD Monitor hier den Wert 0xFAA732 erkennt. Kann man das irgendwie einstellen, das ein paar Farbnuancen noch oben und unten als Toleranz gewertet werden?

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 29. April 2019 um 08:41

    Guten Morgen, jetzt muss ich den Thread doch nochmals öffnen

    Code
    Python
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    #include <MsgBoxConstants.au3>
    #include <TrayConstants.au3>
    #include <Sound.au3>
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    #EndRegion ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    
    #Region ; Script Kopf
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version:     3.3.14.5
        Author:             Code4Fun
    
        Script Function:     Das Script scannt einen bestimmten Bereich auf dem Monitor. Dieser Bereich zeigt ein webbasiertes Servermonitoring.
        Im Normalfall ist dort die Farbe grün = OK
        Wenn es auf orange oder rot wechselt, soll dieses Script hier später einen aktustischen Alarm auslösen.
    
        Erstellungendatum: vom 25.04.2019
    
        Änderungsdatum:
    
        Version: 0.0.1.0
    
        History:
    
        0.0.1: Initialerstellung
    
    #ce ----------------------------------------------------------------------------
    #EndRegion ; Script Kopf
    
    #Region ; AutoIt-Spezifischen Optionen
    
    Opt("GUICloseOnESC", 1) ; Wenn man die ESC Taste drückt, wird die GUI geschlossen, da eine $GUI_EVENT_CLOSE Nachricht gesendet wird
    Opt("MustDeclareVars", 1) ; Variablen (Dim / Global / Local / Const) müssen deklariert sein. Wichtig für Fehlersuche
    Opt("TrayIconDebug", 1) ; Zeigt die aktuelle Skriptzeile im Trayicon Tipp um das Debugging zu unterstützen
    
    Global $exititem, $sFarbe, $hGUI, $sButton
    Global $iAlarmCounter = 0
    
    #EndRegion ; AutoIt-Spezifischen Optionen
    
    AdlibRegister(_PixelbereichScannen, 1000)
    
    
    ;Tray-Menü anpassen
    Opt("TrayAutoPause", 0) ; Script will not be paused when clicking the tray icon.
    Opt("TrayOnEventMode", 1)
    Opt("TrayMenuMode", 1 + 2)
    
    $exititem = TrayCreateItem("Beenden")
    TrayItemSetState(-1, $TRAY_UNCHECKED)
    TrayItemSetOnEvent(-1, "_Exit")
    TraySetState()
    
    #Region ; Hauptschleife
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $sButton ; wenn OK Button gedrückt wird ..
                _OKpressed()
        EndSwitch
    WEnd
    #EndRegion ; Hauptschleife
    
    #Region ; Funktionen
    Func _PixelbereichScannen()
        Local $aCoord
        ; Wenn in den unten stehenden Koordinaten die Farbe grün (0x53A000) zu finden ist, ist alles OK
        $aCoord = PixelSearch(-2833, 835, -2771, 872, 0x53A000)
        If Not @error Then ; wenn alles OK ist dann
            ConsoleWrite("OK" & @CRLF) ; schreibe OK
            $iAlarmCounter = 0 ; setze Counter wieder zurück auf 0
        Else
            ;ConsoleWrite("Kein Treffer bei OK" & @CRLF)
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe orange (0xFAA732) zu finden ist, ist Warnstufe 1 angesagt
        $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xFAA732)
        If Not @error Then ; wenn oranger Alarm ausgelöst wurde, dann
            ConsoleWrite("Oranger Alarm" & @CRLF) ; schreibe es in die Console
            _ProblemKnopf("orange") ; führe Function aus
        Else
            ;ConsoleWrite("Kein Treffer bei orangener Alarm" & @CRLF)
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe rot (0xA00000) zu finden ist, ist Warnstufe 2 angesagt
        $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xA00000)
        If Not @error Then
            ConsoleWrite("Roter Alarm" & @CRLF)
            _ProblemKnopf("rot") ; führe Function aus
        Else
            ;ConsoleWrite("Kein Treffer bei rotem Alarm" & @CRLF)
        EndIf
    EndFunc   ;==>_PixelbereichScannen
    
    Func _ProblemKnopf($sFarbe)
        If Not $iAlarmCounter = 2 Then ; Wenn der Counter 0 oder 1 ist, dann gehe in die IF Schleife, wenn der Counter 2 ist (es wurde bereits OK gedrückt), dann bleib draußen.
            Local $sLabel
    
            If $iAlarmCounter = 0 Then ; wenn der Counter 0 ist, erstelle die GUI nur einmal
                $iAlarmCounter = 1 ; setze Counter auf 1
                $hGUI = GUICreate("A L A R M", @DesktopWidth - 100, @DesktopHeight - 100, -1, -1, 0x01000200)
            EndIf ; hier ist der Counter auf 1, d.h. die Oberfläche wird angepasst.
            If $sFarbe = "organe" Then ; wenn orangener Alarm, dann
                GUISetBkColor(0xFAA732, $hGUI) ; färbe den Hintergrund in Orange ein
            Else ; ansonsten roter Alarm
                GUISetBkColor(0xA00000, $hGUI) ; ansonsten in rote Farbe
            EndIf
    
            If $sFarbe = "organe" Then ; wenn orangener Alarm, dann
                $sLabel = GUICtrlCreateLabel("ORANGENER ALARM", 600, 100, 600, 200) ; schreibe diesen Text als Label
                GUICtrlSetFont($sLabel, 50, 900)
            Else ; ansonsten
                $sLabel = GUICtrlCreateLabel("ROTER ALARM", 600, 100, 600, 200) ; diesen Text als Label
                GUICtrlSetFont($sLabel, 50, 900)
            EndIf
    
            $sButton = GUICtrlCreateButton("OK", 700, 400, 100, 50) ; erstelle OK Button.
            GUICtrlSetFont($sButton, 50, 900)
            GUISetState(@SW_SHOW)
        EndIf
    
        If $sFarbe = "organe" Then ; wenn orangener Alarm, dann
            _PlaySound("organe")
        Else ; ansonsten roter Alarm
            _PlaySound("rot")
        EndIf
    
    EndFunc   ;==>_ProblemKnopf
    
    Func _PlaySound($sFarbe)
        ; Öffne Sound-Datei ; dies muß verändert werden, falls das Skript unter Vista läuft
        Local $aSound, $sound, $tText
        If $sFarbe = "organe" Then ; wenn orangener Alarm, dann
            $aSound = _SoundOpen(@ScriptDir & "\orange.wav")
        Else ; ansonsten roter Alarm
            $aSound = _SoundOpen(@ScriptDir & "\rot.wav")
        EndIf
    
        If @error = 2 Then
            MsgBox($MB_SYSTEMMODAL, "Fehler", "Die Datei existiert nicht.")
            Exit
        ElseIf @extended <> 0 Then
            Local $iExtended = @extended ; Zuweisung, weil @extended nach DllStructCreate() geändert wird
            Local $stText = DllStructCreate("char[128]")
            DllCall("winmm.dll", "short", "mciGetErrorStringA", "str", $iExtended, "struct*", $tText, "int", 128)
            MsgBox($MB_SYSTEMMODAL, "Fehler", "Öffnen fehlgeschlagen." & @CRLF & "Fehlernummer: " & $iExtended & @CRLF & "Fehlerbeschreibung: " & DllStructGetData($stText, 1) & @CRLF & "Beachte: Möglicherweise kann der Sound dennoch korrekt abgespielt werden.")
        Else
    ;~         MsgBox($MB_SYSTEMMODAL, "Erfolgsmeldung", "Die Datei wurde erfolgreich geöffnet.")
        EndIf
        If $iAlarmCounter = 1 Then ; Wenn der Counter auf 1 ist, sprich ein Alarm wurde ausgelöst, dann soll der Sound erklingen
            ConsoleWrite("$iAlarmCounter ist (Sound sollte spielen): " & $iAlarmCounter & @CRLF)
    ;~         _SoundPlay($aSound, 0)
        Else ; wenn der Counter wieder auf 0 steht, sprich man hat OK gedrückt, dann soll der Sound ausgehen.
            ConsoleWrite("$iAlarmCounter ist (Sound sollte aus sein): " & $iAlarmCounter & @CRLF)
            _SoundClose($sound)
        EndIf
    EndFunc   ;==>_PlaySound
    
    Func _OKpressed()
        GUIDelete($hGUI) ; und lösche die GUI
        $iAlarmCounter = 2 ; setze Counter auf 2
        ConsoleWrite("kommt aus _OKpressed: " & $iAlarmCounter & @CRLF)
    EndFunc   ;==>_OKpressed
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    #EndRegion ; Funktionen
    Alles anzeigen

    Ich habe das Problem, das meine Funktion _OKpressed() (Zeile 67) erst aufgerufen werden soll, nachdem die GUI gebaut wird. Jedoch ist es aktuell so, das beim Starten des Scriptes dieses gleich nonstop durch die Funktion _OKpressed() läuft.

    Vermutlich hat es was damit zu tun, dass $sButton zu diesem Zeitpunkt noch nicht existiert. Wie kann ich dass dann umgehen?

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 26. April 2019 um 15:28

    Danke für die Rückmeldung. Ich habe jetzt den integrierten genommen. Bei mir ist es egal ob MP3 oder WAV. Sind nur 2 unterschiedliche Dateien. Läuft soweit schon, jetzt noch Feinheiten. Trotzdem vielen Dank an alle. Werden den Thread als gelöst markieren.

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 26. April 2019 um 13:48

    water: Danke jetzt geht es wunderbar. Jetzt muss ich nur noch den MP3 Teil "erfinden" und einbauen. Falls Ihr zufällig hier im Forum einen Thread kennt, der auch schon mit MP3 Ausgabe in autoit gespielt hat, wäre ich für eine Link sehr dankbar.

  • 3 verschiedene Farben auf bestimmten Koordinaten erkennen und Meldung ausgeben

    • Code4Fun
    • 25. April 2019 um 17:01

    Hallo hier mal mein Script

    Spoiler anzeigen
    Python
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    #include <GUIConstantsEx.au3> ; für GUI Create, events
    #include <MsgBoxConstants.au3> ; für MsgBox
    #include <TrayConstants.au3>
    #EndRegion ; mögliche Includes einbinden, bzw. nur die notwendigen einbinden.
    
    #Region ; Script Kopf
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version:     3.3.14.5
        Author:             Code4Fun
    
        Script Function:     Das Script scannt einen bestimmten Bereich auf dem Monitor. Dieser Bereich zeigt ein webbasiertes Servermonitoring.
        Im Normalfall ist dort die Farbe grün = OK
        Wenn es auf orange oder rot wechselt, soll dieses Script hier später einen aktustischen Alarm auslösen.
    
        Erstellungendatum: vom 25.04.2019
    
        Änderungsdatum:
    
        Version: 0.0.1
    
        History:
    
        0.0.1: Initialerstellung
    
    #ce ----------------------------------------------------------------------------
    #EndRegion ; Script Kopf
    
    #Region ; AutoIt-Spezifischen Optionen
    
    Opt("GUICloseOnESC", 1) ; Wenn man die ESC Taste drückt, wird die GUI geschlossen, da eine $GUI_EVENT_CLOSE Nachricht gesendet wird
    Opt("MustDeclareVars", 1) ; Variablen (Dim / Global / Local / Const) müssen deklariert sein. Wichtig für Fehlersuche
    Opt("TrayIconDebug", 1) ; Zeigt die aktuelle Skriptzeile im Trayicon Tipp um das Debugging zu unterstützen
    
    Global $exititem
    
    #EndRegion ; AutoIt-Spezifischen Optionen
    
    AdlibRegister(_PixelbereichScannen, 1000)
    
    ;Tray-Menü anpassen
    Opt("TrayAutoPause", 0) ; Script will not be paused when clicking the tray icon.
    Opt("TrayOnEventMode", 1)
    Opt("TrayMenuMode", 1 + 2)
    
    $exititem = TrayCreateItem("Beenden")
    TrayItemSetState(-1, $TRAY_UNCHECKED)
    TrayItemSetOnEvent(-1, "_Exit")
    TraySetState()
    
    #Region ; Hauptschleife
    While 1
    
    WEnd
    #EndRegion ; Hauptschleife
    
    #Region ; Funktionen
    Func _PixelbereichScannen()
        Local $aCoord
        ; Wenn in den unten stehenden Koordinaten die Farbe grün (0x53A000) zu finden ist, ist alles OK
        If $aCoord = PixelSearch(-2833, 835, -2771, 872, 0x53A000) Then
            If Not @error Then
                ConsoleWrite("OK" & @CRLF)
            Else
                ConsoleWrite("Kein Treffer bei OK" & @CRLF)
            EndIf
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe orange (0xFAA732) zu finden ist, ist Warnstufe 1 angesagt
        If $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xFAA732) Then
            If Not @error Then
                ConsoleWrite("Oranger Alarm" & @CRLF)
            Else
                ConsoleWrite("Kein Treffer bei orangener Alarm" & @CRLF)
            EndIf
        EndIf
    
        ; Wenn in den unten stehenden Koordinaten die Farbe rot (0xA00000) zu finden ist, ist Warnstufe 2 angesagt
        If $aCoord = PixelSearch(-2833, 835, -2771, 872, 0xA00000) Then
            If Not @error Then
                ConsoleWrite("Roter Alarm" & @CRLF)
            Else
                ConsoleWrite("Kein Treffer bei rotem Alarm" & @CRLF)
            EndIf
        EndIf
    EndFunc   ;==>_PixelbereichScannen
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    #EndRegion ; Funktionen
    Alles anzeigen

    Beschreibung vom Script:

    Das Script scannt einen bestimmten Bereich auf dem Monitor. Dieser Bereich zeigt ein webbasiertes Servermonitoring.

    Im Normalfall ist dort die Farbe grün = OK

    Wenn es auf orange oder rot wechselt, soll dieses Script hier später einen aktustischen Alarm auslösen (aktuell nur ein Konsolenausgabe)

    Aktuell habe ich ein System mal vom Netz genommen, d.h. an der zu suchenden Stelle ist jetzt die Farbe rot. Es wird mir aber in der Console nur Kein Treffer bei OK und Kein Treffer bei orangener Alarm ausgegeben. Es müsste doch aber auch Roter Alarm ausgegeben werden. Alle 3 Farben wurden mit einer Farbpipette ausgelesen.

    Es ist das erste mal, das ich mit sowas rumspiele, es fehlt also der Erfahrungswert. BTW. Kann mir vielleicht noch jemand helfen, wie ich später statt der Consolenausgabe eine MP3 Sounddatei abspiele.

    Vielen Dank

  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 12:37

    Danke für eure Hilfe. Ich habe es jetzt "ähnlich" der Lösung von BugFix selbst so gemacht. Da ich ja in der Aufgabenplanung bereits eine EXE als "Monitoring" laufen habe, habe ich dort einfach geschaut, ob meine "Haupt.exe" noch läuft. Da diese sich ja sauber beendet, aber noch die eine "conhost.exe" offen ist, wird hieraus die PID dieser speziellen "conhost.exe" ermittelt und dann beendet. Funktioniert bisher sehr gut. Ich werde diesen Thread von daher mal als erledigt markieren.

  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 11:31

    Die Anwendungen werden alle mit dem Run Befehl gestartet.

  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 11:16
    Function _01_AppStarter()
    Code
    Func _01_AppStarter() ; das ist die Hauptfunktion, die beim Start der Anwendung die anderen Funktionen steuert
    GUICtrlSetData($sLabel3, "")
    GUISetState(@SW_SHOW, $hGUI)
    $hTimer = TimerInit() ; Beginnt den Timer speichert das Handle in einer
    ; .... hier kommen die ganzen Funktionen rein
    WinActivate("[TITLE:AppStarter]")
    _01_SetConsoleTitle("Anwendungen werden gestartet")
    ;WinMove("[TITLE:Bitte hier eine Beschreibung eintragen; CLASS:ConsoleWindowClass]", "", 413, 1, 993, 520)
    WinMove("[TITLE:Anwendungen werden gestartet; CLASS:ConsoleWindowClass]", "", 413, 1, 993, 520)
    ConsoleWrite("IP wird gecheckt" & @CRLF)
    _02_AppIPChecker()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("diverse Kleinanwendungen werden gestartet" & @CRLF)
    _99_AppsStarten()
    Sleep(5000)
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Tawk.to wird gestartet" & @CRLF)
    _99_TAWKTO()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Notepad++ wird gestartet" & @CRLF)
    _99_Notepadpp()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("KeePass wird gestartet" & @CRLF)
    _99_KeePass()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Skype wird gestartet" & @CRLF)
    _99_Skype()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Microsoft Edge wird gestartet" & @CRLF)
    _99_MSEdge()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Google Chrome wird gestartet" & @CRLF)
    _99_GoogleChrome("https://atbtalk.usp365.de/de/Home/Dashboard")
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Telegram wird gestartet" & @CRLF)
    _99_Telegram()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Microsoft Teams wird gestartet" & @CRLF)
    _99_MSTeams()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Microsoft OneNote wird gestartet" & @CRLF)
    _99_MSOneNote()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Lotus Notes wird gestartet" & @CRLF)
    _99_LotusNotes()
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Microsoft Outlook wird gestartet" & @CRLF)
    _99_MSOutlook()
    WinMove("[TITLE:Anwendungen werden gestartet; CLASS:ConsoleWindowClass]", "", 3803, 55, 993, 520)
    WinActivate("[TITLE:AppStarter]")
    ConsoleWrite("Firefox wird gestartet" & @CRLF)
    _99_Firefox("")
    ;~ 		WinActivate("[TITLE:AppStarter]")
    ;~ 		ConsoleWrite("Citrix wird gestartet" & @CRLF)
    ;~ 		_99_Citrix()
    ConsoleWrite("Fertig" & @CRLF)
    $fDiff = Round(TimerDiff($hTimer) / 1000, 3)
    GUICtrlSetData($sLabel3, $fDiff)
    ConsoleWrite("benoetigte Zeit: " & $fDiff & @CRLF)
    ;WinActivate("[TITLE:AppStarter]")
    ;GUISetState(@SW_SHOW, $hGUI)
    ;MsgBox(64, "Fertig", "Alles wurde gestartet", 5)
    EndFunc   ;==>_01_AppStarter
    Alles anzeigen

    und hier die Ausgabe des Kommandozeilen Fenster

    Ausgabe vom Kommandozeilen Fenster
    Code
    IP wird gecheckt
    diverse Kleinanwendungen werden gestartet
    Tawk.to wird gestartet
    
    Checking for update
    > $hWnd = 0x00000000000A1590 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x00000000000A1590
    Notepad++ wird gestartet
    > $hWnd = 0x0000000000171272 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x0000000000171272
    KeePass wird gestartet
    Update for version 2.0.1 is not available (latest version: 2.0.1, downgrade is disallowed.
    Skype wird gestartet
    > $hWnd = 0x0000000000100BF2 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x0000000000100BF2
    Microsoft Edge wird gestartet
    > $hWnd = 0x000000000010100E <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x000000000010100E
    Google Chrome wird gestartet
    Seiten wiederherstellen? ist vorhanden
    Telegram wird gestartet
    > $hWnd = 0x000000000010096A <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x000000000010096A
    Microsoft Teams wird gestartet
    > $hWnd = 0x00000000000B069C <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    Teams gefunden
    - $iMove = 0x0000000000200534
    Microsoft OneNote wird gestartet
    > $hWnd = 0x00000000000A1410 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x00000000000A1410
    Lotus Notes wird gestartet
    > $hWnd = 0x00000000000908D6 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x00000000000908D6
    Microsoft Outlook wird gestartet
    > $hWnd = 0x00000000000B0084 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x00000000000B0084
    Firefox wird gestartet
    > $hWnd = 0x00000000001213E2 <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!
    - $iMove = 0x00000000001213E2
    Fertig
    benoetigte Zeit: 77.006
    Alle Anwendungen wurden gestartet. In 5 Sekunden beendet sich diese Anwendung
    Zeile nachdem 5 Sekunden gewartet wurde. Jetzt kommt als nõchstes der Exit Aufruf
    Alles anzeigen
  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 11:00

    Das verstehe ich jetzt nicht. Wenn ich in der _01_AppStarter() irgendwo festhängen würde (was ich ich nicht mache, da ich ja das Ende der Funktion kenne und das auch ausgeführt wird), dann dürfte doch die Zeile ConsoleWrite("Alle Anwendungen wurden gestartet. In 5 Sekunden beendet sich diese Anwendung" & @CRLF) gar nicht aufgerufen werden. Oder? Da die aber aufgerufen wird, muss ja auch der

    Code
    Sleep(5000)
    Exit

    erfolgen.

    Es wird ja auch die GUIDelete($hGUI) ; schließe die GUI abgearbeitet. Und ein Exit sollten doch hart durchgreifen.

  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 10:39

    Hallo alpines, habe jetzt etwas optimieren können, aber noch hängt es an einer Stelle.

    Hier mal der wichtige Code:

    Code
    #Region ; Hauptschleife
    $iMsg = 0
    While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $iBTNStart ; wenn der Button "Apps starten gedrückt wird, wird die Funktion _01_AppStarter()aufgerufen.
    _01_AppStarter()
    ConsoleWrite("Alle Anwendungen wurden gestartet. In 5 Sekunden beendet sich diese Anwendung" & @CRLF)
    Sleep(5000)
    Exit
    Case $iBTNKill ; wenn der Button "Apps beenden" gedrückt wird, wird die Funktiion _KILL() aufgerufen.
    _KILL()
    ConsoleWrite("Alle Anwendungen wurden beendet. In 5 Sekunden beendet sich diese Anwendung" & @CRLF)
    Sleep(5000)
    Exit
    Case $GUI_EVENT_CLOSE ; Die Anwendung wird geschlossen
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($hGUI) ; schließe die GUI
    #EndRegion ; Hauptschleife
    Alles anzeigen

    Beim Case $iBTNKill funktioniert alles einwandfrei. Ich bekomme zum Schluß in der Kommandozeile die Meldung Alle Anwendungen wurden beendet. In 5 Sekunden beendet sich diese Anwendung angezeigt. Dann bleibt es über den Sleep(5000) noch offen und wird sauber mit Exit beendet.

    Beim Case $iBTNStart sieht das leider anderst aus. Auch hier bekomme ich in der Kommandozeile die Meldung Alle Anwendungen wurden gestartet. In 5 Sekunden beendet sich diese Anwendung. Nach den 5 Sekunden schließt sich jedoch das Kommandozeilen Fenster nicht, sondern bleibt mit der Meldung stehen. Der Cursor blinkt eine Zeile darunter noch. Der Befehl GUIDelete($hGUI) wird aber ausgeführt, d.h. meine GUI wird beendet. Es bleibt wie gesagt nur das Kommandozeilen Fenster offen.

    Was mache ich hier noch falsch?

  • Frage zu CUI EXE Fenster

    • Code4Fun
    • 25. April 2019 um 08:22

    Hallo,

    ich würde - zu Monitorzwecken - mein Script als CUI EXE compilieren (was auch geht). Jedoch habe ich folgende 2 Fragen.

    1.) Wenn sich das CUI Fenster öffnet, steht als Fenster Title Bitte hier eine Beschreibung eintragen. Wo genau definiere ich denn diesen Title?

    2.) Wenn ich das nur als GUI compiliere, dann schließt sich nach Ablauf des Scripts (es werden nur andere Anwendungen damit gestartet) die GUI. Bei der CUI Variante bleibt das CUI Fenster aber geöffnet. Kann man das irgendwie auch automatisch schließen lassen?

    Vielen Dank

  • Wie bildet man ein RunOnce ab?

    • Code4Fun
    • 4. April 2019 um 10:18

    Danke für eure Hilfe. Der Tip mit den Countern war gut. Funktioniert jetzt super.

    ABER !!! Die 1. EXE läuft als Dienst noch nicht. Habe Sie folgendermaßen als Dienst unter Windows 10 - Version 1809 (Build 17763.379) eingerichtet.

    CMD als Administrator geöffnet und dann folgenden Befehl ausgeführt.

    Code
    sc create "AppStarter Monitor Service" start= auto binpath= "C:\Pfad zur Anwendung\AppStarterMonitorService.exe"

    Muss man sein Script irgendwie noch vorbereiten, damit es als Dienst läuft?

    Fehlermeldung ist: Der Dienst "AppStarter Monitor Service" auf "Lokaler Computer" konnte nicht gestartet werden. Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

    Nachtrag: Ich habe es jetzt "temporär" via Windows Aufgabenplanung gelöst, d.h. sobald ich mich anmelde, wird die 1. EXE gestartet. Dienst wäre etwas schicker.

  • Wie bildet man ein RunOnce ab?

    • Code4Fun
    • 4. April 2019 um 08:07

    Guten Morgen,

    ich möchte gerne folgendes verwirklichen.

    Ein Script (EXE) bauen, die als Windows dienst läuft. Diese frägt mit AdlibRegister eine Funktion ab, welche nach der Existenz eines bestimmten Fenstern sucht. Sobald dieses Fenster existiert, soll eine weiteres Script (EXE) gestartet werden, welches genau einmal durchläuft und sich dann selbst beendet.

    Aktuell wird die aufgerufene EXE aber alle 250 ms neu gestartet, da ich bisher den Aufruf nur mit Run verwirklicht habe. Wie bilde ich hier den ein RunOnce ab?

    Kurze Erklärung was hier genau passieren soll.

    • Die 1. EXE läuft als Dienst uns schlummert im Hintergrund.
    • Wenn ich dann ein Telefonat reinbekomme, öffnet sich das Fenster, auf welches der Dienst wartet.
    • Wenn das Fenster entdeckt wird, soll die 2. EXE nur einmal starten. Diese positioniert 2 Fenster genau 1 mal an bestimmte Koordinaten. Danach beendet sich die 2. EXE
    • Problem ist jetzt, das die 1. EXE ja das zu suchende Fenster gleich wieder findet, jetzt aber die 2. EXE nicht mehr ausgeführt werden soll.

    Danke für Eure Hilfe

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Code4Fun
    • 2. April 2019 um 10:29

    Danke Bitnugger für die Erklärung.

    Jetzt habe ich aber noch ein anderes kleines Problem. Ich muss aber zugeben, das ich bisher mit While ... Wend noch nicht bewußt gearbeitet habe.
    In meinem Script habe ich eine Funktion, welche kurz vor Feierabend (natürlich manuell ausgelöst) viele meiner manuell gestarteten Anwendungen beendet.
    Ich habe jetzt 2 Anwendungen, die beide CSBridge.exe heißen, jedoch aus 2 unterschiedlichen Verzeichnissen gestartet wurden.

    Zuerst hatte ich nur die Zeile ProcessClose("CSBridge.exe"), welche aber nur eine Instanz beendet hat.

    Danach habe ich den Aufruf 2x gestartet, was aber auch nicht immer geholfen hat.

    Jetzt möchte ich das gerne mit einer Schleife lösen, aber irgendwas mache ich noch falsch, da die Schleife gar nicht abgearbeitet wird.

    Ich denke mein Aufruf While $iPID NOT 0 stimmt noch nicht ganz.

    Was mache ich hier falsch?

    Code
    Func _KILL()
            Local $iPID
            ConsoleWrite("die $iPID ist aktuell: " & $iPID & @CRLF)
            While $iPID NOT 0
                $iPID = ProcessExists("CSBridge.exe")
                ConsoleWrite("die $iPID ist aktuell: " & $iPID & @CRLF)
                ProcessClose("CSBridge.exe")
                ConsoleWrite("die $iPID ist aktuell: " & $iPID & @CRLF)
            WEnd
    EndFunc

    Vielen Dank

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Code4Fun
    • 29. März 2019 um 15:57

    Cool, die 2. Variante mit dem ";" hat funktioniert. Kannst Du mir, bzw. den Mitlesern mal erklären, was hier genau passiert

    $hWnd = WinWaitActive("[TITLE:IBM Notes Arbeitsbereich; CLASS:SWT_Window0]", "", 1) ; Wartet maximal 1 Sekunde

    Wird hier entweder auf das erscheinen des Titles UND / ODER auf die Klasse gewartet?

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Code4Fun
    • 29. März 2019 um 13:59

    Hallo Bitnugger,

    dein Script fliegt hier raus If Not IsHWnd($hWnd) Then _ErrExit(4, 'Fehler bei WinWaitActive!') ; Fehlermeldung wird erzeugt, somit kann ich die beiden Handles noch nicht vergleichen. Oder macht es Sinn die Consolenausgabe zwischen Until und If Zeile zu setzen.

    Wegen den gleichen Koordinaten. Da habe ich ja geschrieben Else ; ansonsten sind dies die Koordinaten der Anwendung (Achtung: müssen vor Ort noch geprüft werden). Ich scripte gerade an meinem Arbeitsplatz zu Hause und muss dann am anderen Arbeitsplatz erst mal die anderen Koordinaten ermitteln.

    Zu Deiner Aussage

    Zitat

    Für dein Vorhaben ist die Verwendung von Send eh absolut an keiner Stelle sinnvoll...

    muss ich folgends sagen. Ich gebe Dir da im prinzip recht, aber Du kennst ja sicherlich die Windows Tastenkombinationen "WinTaste" + Pfeiltasten, womit man die Fenster wunderbar auf den Monitoren positionieren kann, wenn man Sie im Verhältnis 1:4 1:2 oder 1:1 haben möchte. Dafür war der Gedankengang mit dem Send Befehl.

    Nachtrag um 15:11 Uhr.

    Ich habe jetzt eine weitere Anwendung, die sich nicht verschieben lässt. Habe jetzt den Handle via Console ausgeben lassen, als das Script noch gelaufen ist. Der Wert war 0x00000000001F0E96. Nachdem das Script beendet war habe ich die Anwendung mit dem Windows Info Tool gegen gecheckt. Hier ist der Handle 0x00000000001C1196. Ist das normal, dass sich der Handle ändert?

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Code4Fun
    • 28. März 2019 um 15:03

    Noch eine kleine Frage nebenbei. Wie bilde ich Autoit den die Tastenkombination "gedrückte linke Windows Taste + z.B. Pfeiltaste 1x nach oben drücken" ab.

    Das hier

    Code
    Send("{LWIN down}{UP}") ;

    geht irgendwie nicht. Es öffnet sich hier das Windows Menü. Ich dachte ich hole mir vorher nochmals von Lotus Notes den Focus, aber irgendwie will das nicht

    Code
    If $sLocation = "GP" Then ; wenn Du im Homeoffice bist, sind dies die Koordinaten der Anwendung
                Sleep(20000)
                ConsoleWrite("Warten fertig" & @CRLF)
                WinActivate($hApp) ; nochmals sicher stellen, dass das Fenster von Lotus Notes den Focus hat
                Send("{LWIN down}{UP}") ; halt die linke Windows Taste gedrückt und klicke 1 mal die Pfeiltaste nach oben
    ;~             Send("{LWIN down}{RIGHT}") ; halt die linke Windows Taste gedrückt und klicke 1 mal die Pfeiltaste nach oben
                Send("{LWIN up}") ; lass die linke Windows Taste wieder los.
    ;~             WinMove($hApp, "", $iX, $iY, $iW, $iH) ; Verschiebt die Anwendung an obige Koordinaten
            Else ; ansonsten sind dies die Koordinaten der Anwendung
  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Code4Fun
    • 28. März 2019 um 15:01

    Also die Lösung von Bitnugger scheint oft zu gehen, aber leider nicht immer. Auch habe ich den WinTitleMatchMode auf 4 gestellt.

    Hier ein Problem mit Lotus Notes

    Code von Lotus Notes
    Code
    Func _99_LotusNotes() ; Lotus Notes
            Local $iWait = 0, $iX, $iY, $iW, $iH, $sAppName
            $sAppName = "Lotus Notes"
            GUICtrlSetData($sLabel5, $sAppName)
            GUISetState(@SW_SHOW, $hGUI)
            If $sLocation = "GP" Then ; wenn Du im Homeoffice bist, sind dies die Koordinaten der Anwendung
                $iX = 3015
                $iY = 34
                $iW = 592
                $iH = 996
            Else ; ansonsten sind dies die Koordinaten der Anwendung (Achtung: müssen vor Ort noch geprüft werden)
                $iX = 3015
                $iY = 34
                $iW = 592
                $iH = 996
            EndIf
            Local $iPID = Run("C:\Program Files (x86)\IBM\Notes\notes.exe", "", @SW_MINIMIZE) ; starte Lotus Notes
            If Not $iPID Then _ErrExit(4, 'Fehler bei Run!') ; Fehlermeldung wird erzeugt
            Do
                Local $hApp = WinWaitActive("[TITLE:IBM Notes]", "", 1) ; Wartet maximal 1 Sekunde
                $iWait += 1
            Until $hApp Or $iWait = 20
            If Not IsHWnd($hApp) Then _ErrExit(4, 'Fehler bei WinWaitActive!') ; Fehlermeldung wird erzeugt
            Sleep(250) ; Vorsichtshalber noch etwas warten! (Teste auch mal ohne, oder evtl. erhöhen, wenn WinMove nicht klappt.)
            ;ab hier könnte unter Umständen noch eine weitere Interaktion mit der jeweiligen Anwendung passieren, z.B. Benutzerdaten eintrage usw.
            If $sLocation = "GP" Then ; wenn Du im Homeoffice bist, sind dies die Koordinaten der Anwendung
                WinActivate($hApp) ; nochmals sicher stellen, dass das Fenster von Lotus Notes den Focus hat
                Sleep(10000)
                ConsoleWrite("10 Sekunden warten sind rum" & @CRLF)
                WinMove($hApp, "", $iX, $iY, $iW, $iH) ; Verschiebt die Anwendung an obige Koordinaten
            Else ; ansonsten sind dies die Koordinaten der Anwendung
                WinActivate($hApp) ; nochmals sicher stellen, dass das Fenster von Lotus Notes den Focus hat
                WinMove($hApp, "", $iX, $iY, $iW, $iH) ; Verschiebt die Anwendung an obige Koordinaten
            EndIf
        EndFunc   ;==>_99_LotusNotes
    Alles anzeigen

    Das Script geht in Zeile 26 definitiv in den IF Bereich rein (sehe ich ja anhand der Consolen Ausgabe), aber der WinMove geht nicht. Lotus Notes bleibt immer in der Größe, wie es zuvor geschlossen wurde.

    Hier mal die Ausgabe vom aktuellen Windows Info

    Aktuelle Werte von Windows Info
    Code
    >>> Window <<<<
    Title:    IBM Notes Arbeitsbereich
    Class:    SWT_Window0
    Position:    2336, 91
    Size:    799, 839
    Style:    0x96CF0000
    ExStyle:    0x00100100
    Handle:    0x00000000000F0DF2
    
    >>>> Control <<<<
    Class:    
    Instance:    
    ClassnameNN:    
    Name:    
    Advanced (Class):    
    ID:    
    Text:    
    Position:    
    Size:    
    ControlClick Coords:    
    Style:    
    ExStyle:    
    Handle:    
    
    >>>> Mouse <<<<
    Position:    2653, 103
    Cursor ID:    0
    Color:    0xFFFFFF
    
    >>>> StatusBar <<<<
    
    >>>> ToolsBar <<<<
    
    >>>> Visible Text <<<<
    Gesamte Mail suchen
    Arbeitsbereich
    
    
    >>>> Hidden Text <<<<
    scratchpad
    scratchpad Notes
    Alles anzeigen

    Ich habe auch mal gehört, das manche Anwendungen sich die letzte Position merken. Wie ist das denn abgelegt, bzw. wie kann man das manipulieren?

    Danke für eure Hilfe

    Nachtrag um 15:54 Uhr: mit Outlook ist es genau das gleiche. Da moved rein gar nichts.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™