Tray überwachen

  • Hi,

    wir sind dabei auf einen neue Firewall umzustellen die einen eigenen Client mitbringt. Dieser Client liegt als Tray in der Taskbar und wird auch von da gesteuert. Gibt es eine Möglichkeit einen TrayTip zu überwachen?
    Also wenn Traytip mit der und der Message kommt dann mach dies und jenes.

    EDIT:
    Hab was gefunden:
    [ neu ] Tooltip (Win Tool Tips auslesen)

    das muss ich dann nur so weit umbiegen dass es nicht in die Konsole geschrieben wird sondern abgefragt.


    EDIT2:

    Um das mal genauer zu erklären.
    Ich hätte gerne dass das programm im Hintergrund läuft und nichts macht bis das TryTip "Verbunden" erscheint und dann los legt mit verschiedenen Funktionen.
    Noch krieg ich das aber nicht so hin.
    Mein kläglicher Versuch bisher:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
    While 1 Sleep(100) ; Sleep to reduce CPU usageWEnd
    Func GP_Connect()_GetTrayMessage()EndFunc

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

    Func _GetTrayMessage() Local $wl, $List, $LastList = ''

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

    While 1 $List = '' $wl = WinList("[class:tooltips_class32]");get all th etooltips
    For $n = 1 To $wl[0][0] If BitAND(WinGetState($wl[$n][1]), 2) Then;if visible $List &= WinGetTitle($wl[$n][1]); read the title, which for a tooltip is the text EndIf Next If $List =("Verbunden") Then MsgBox(0,"","Tadaaaa") EndIf;~ If $List <> $LastList And $List <> '' Then;~ ConsoleWrite($List & @CRLF);~ $LastList = $List;~ EndIfWEnd
    EndFunc ;==>_Exit

    [/autoit]




    ich erinnere mich dunkel dass sowas mit dem OnEventMode gehen müsste.
    GUIOnEventMode ist aber Quastch oder? Dazu bräuchte ich ja eine Gui.
    Kann mir da mal jemand auf die Sprünge helfen?


    Das Problem ist dass ich kein Entwickler bin, ich hab zwar in grauer Vorzeit mal programmieren gelernt aber brauch es auch nur alle jubeljahre mal :pinch: 

    4 Mal editiert, zuletzt von Camulus (12. Februar 2014 um 14:22)

  • Wir kommen der Sache näher:


    So siehts aus:

    Spoiler anzeigen
    [autoit]

    While 1
    _GetTrayMessage() Sleep(1000)

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

    WEnd

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

    Func _GetTrayMessage()
    Local $wl, $List, $LastList = ''
    $List = '' $wl = WinList("[class:tooltips_class32]")
    For $n = 1 To $wl[0][0] If BitAND(WinGetState($wl[$n][1]), 2) Then $List &= WinGetTitle($wl[$n][1]) EndIf Next If $List =("Dienste verbunden") Then _CreateGUI() _MapDrive() EndIf

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

    EndFunc

    [/autoit]


    Wie verlasse ich die While Schleife wenn die "Dienste verbunden" wurden?

    4 Mal editiert, zuletzt von Camulus (12. Februar 2014 um 16:03)

  • Zum Beispiel so:

    Spoiler anzeigen
    [autoit]

    While 1
    $erg = _GetTrayMessage() Sleep(1000)
    If $erg == 1 Then
    ExitLoop
    EndIf
    WEnd

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

    Func _GetTrayMessage()
    Local $wl, $List, $LastList = ''
    $List = ''
    $wl = WinList("[class:tooltips_class32]")
    For $n = 1 To $wl[0][0]
    If BitAND(WinGetState($wl[$n][1]), 2) Then
    $List &= WinGetTitle($wl[$n][1])
    EndIf
    Next

    If $List = ("Dienste verbunden") Then
    _CreateGUI()
    _MapDrive()
    Return 1
    EndIF
    EndFunc ;==>_GetTrayMessage

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

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Darf man fragen, warum du "$List &= " anstatt z.B. "if "WinTitle = ... Then Return 1" verwendest?

  • Danke chip.
    Funktioniert schon fast. Allerdings wird die Funtion _CreateGui nicht aufgerufen.

    Habs noch ein bißchen umgebaut:


    [autoit]

    While 1
    Sleep(1000)
    $erg = _GetTrayMessage()

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

    If $erg == 1 Then ExitLoop
    MsgBox(0,"","Loop verlassen",1)
    _CreateGUI()
    _MapDrive()
    EndIf
    Wend
    Func _GetTrayMessage()
    Local $wl, $List, $LastList = ''
    $List = ''
    $wl = WinList("[class:tooltips_class32]")
    For $n = 1 To $wl[0][0]
    If BitAND(WinGetState($wl[$n][1]), 2) Then
    $List &= WinGetTitle($wl[$n][1])
    EndIf
    Next
    If $List = ("Dienste verbunden") Then
    MsgBox(0,"","Dienste verbunden",1)
    Return 1
    MsgBox(0,"","weiter",1) EndIF
    EndFunc ;==>_GetTrayMessage

    [/autoit]


    Die Messagebox mit weiter kommt nicht und ich verstehe nicht ganz warum ?(

    Einmal editiert, zuletzt von Camulus (13. Februar 2014 um 08:10)

  • Weil zuvor "Return 1" ausgeführt wird und das bedeutet, dass die Funktion 'abgebrochen' wird ==> MsgBox(...) wird nicht ausgeführt.