PlutoBubble

  • Okay, da mir ein eigener Client für Spin zuviel wird arbeite ich an kleineren Add-Ons.
    Nur hänge ich gerade beim abfragen von Pluto :/

    Vorhaben:
    Es handelt sich um einen Chatclienten AddOn, ich will nur die Texte aller Fenster
    abfragen & eine Narchicht ausgeben wenn sich der Text geändert hat (Neue Narchicht).
    Das mit dem Abfragen etc klappt alles, aber so wie ich es oben mit den Commands habe fragt
    er nur das aktive Fenster ab. Gibt es eine möglichkeit alle Fenster abzufragen?

    Sourcecode für das aktive Fenster (geht bugfrei):

    Spoiler anzeigen
    [autoit]

    ;==============================================================
    ; PlutoBubble
    ;==============================================================
    ; Author: Sen
    ;==============================================================
    #include <String.au3>
    #include <GUIConstantsEx.au3>
    #Include <Constants.au3>

    ;Options
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 3)
    $RunStatus = True
    $TrayStatus = False

    ;Check & Run Pluto
    If ProcessExists("PLUTO.EXE") Then
    Sleep(50)
    Else
    Run("PLUTO.EXE")
    EndIf

    ;Tray Msgs & Menü
    $Tray = TrayCreateMenu("Status")
    $On = TrayCreateItem("On", $Tray)
    $Off = TrayCreateItem("Off", $Tray)
    $Exit = TrayCreateItem("Exit")
    TrayItemSetState($On, $TRAY_DISABLE)

    AdlibRegister("MsgSystem", 500)
    $Msgs = ControlGetText("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:1]")

    While True
    Sleep(50)
    $TrayMsg = TrayGetMsg()
    Switch $TrayMsg
    Case $On
    $RunStatus = True
    TrayItemSetState($On, $TRAY_DISABLE)
    TrayItemSetState($Off, $TRAY_ENABLE)
    Case $Off
    $RunStatus = False
    TrayItemSetState($Off, $TRAY_DISABLE)
    TrayItemSetState($On, $TRAY_ENABLE)
    Case $Exit
    Exit
    EndSwitch

    If Not ProcessExists("PLUTO.EXE") Then
    Exit
    EndIf

    If WinActive("Pluto Client") And $TrayStatus = True Then
    TrayTip("PlutoBubble", "", 0)
    $TrayStatus = False
    EndIf
    WEnd

    Func MsgSystem()
    If $RunStatus = True Then
    $NewMsgs = ControlGetText("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:1]")
    If $NewMsgs <> $Msgs Then
    $Splittext = StringSplit($NewMsgs, @CRLF, 1)
    $LastLine = $Splittext[$Splittext[0] - 1]
    If GetImportant($LastLine) = 1 Then
    If Not WinActive("Pluto Client") Then
    If WroteUser($LastLine) = 1 Then
    $Info = GetUserAndMessage($LastLine)
    TrayTip($Info[0], $Info[1], 5, 1)
    $TrayStatus = True
    Else
    $Info = GetUserAndMessage($LastLine)
    TrayTip($Info[0], $Info[1], 5, 16)
    $TrayStatus = True
    EndIf
    Else
    TrayTip("PlutoBubble", "", 0)
    $TrayStatus = False
    EndIf
    EndIf
    $Msgs = ControlGetText("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:1]")

    EndIf
    EndIf
    EndFunc ;==>MsgSystem

    Func GetImportant($Line)
    If StringLeft($Line, 1) = "[" And StringRight($Line, 1) = "]" Then
    Return ("0 - Join/Leave")
    ElseIf StringRight($Line, 3) = ":f:" Or StringRight($Line, 3) = ":m:" Then
    Return ("0 - Join/male-female")
    ElseIf WroteUser($Line) = 1 Then
    Return ("0 - User himself")
    Else
    Return (1)
    EndIf
    EndFunc ;==>GetImportant

    Func WroteUser($Line)
    $FullTitel = WinGetTitle("Pluto Client")
    $Username = _StringBetween($FullTitel, "Pluto Client FE buildID 0036 (", ")")
    If StringInStr($Line, $Username[0]) Then
    Return (1)
    Else
    Return (0)
    EndIf
    EndFunc ;==>WroteUser

    Func GetUserAndMessage($Line)
    $UserString = StringSplit($Line, ":", 1)
    $User_Msg = $UserString[1]
    $Message_Msg = ""
    For $i = 2 To $UserString[0]
    $Message_Msg &= ":" & $UserString[$i]
    Next
    $Message_Msg = StringTrimLeft($Message_Msg, 2)
    Dim $Return[2]
    $Return[0] = $User_Msg
    $Return[1] = $Message_Msg
    Return ($Return)
    EndFunc ;==>GetUserAndMessage

    [/autoit]

    Command zum Abfragen des Handel's:

    [autoit]

    ControlGetHandle("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:1]")

    [/autoit]


    Command zum Abfragen des Text's (ohne das Handle zu benutzen):

    [autoit]

    ControlGetText("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:1]")

    [/autoit]

    Probleme:
    1. Die "Instance" scheint sich dauernd zu ändern.
    2. Die Anzahl der Conrol's die abgefragt werden müssen ändert sich und ich finde keinen Weg sie abzufragen.

    Jemand eine Idee wie man die Anzahl der Controls abfragen kann & alle in einer Schleife vergleichen
    kann anstelle des aktiven? :/

    Edit:
    Hab jezt raus wie ich die texte aus allen Räumen abfragen kann.
    (Grobes Beispiel, ignoriert die nicht passenden Arrays etc xD)

    [autoit]

    For $i = 1 To 40
    If ControlGetHandle("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:" & $i & "]") <> "" Then
    $Handle[$i] = ControlGetHandle("[CLASS:ThunderRT5MDIForm]", "", "[CLASS:RichEdit20A; INSTANCE:" & $i & "]")
    Else
    $Handle[0] = $i - 1
    ReDim $Handle[$i]
    ExitLoop
    EndIf
    Next

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

    For $i = 1 To UBound($Handle) - 1
    $Text[$i] = ControlGetText($Handle[$i], "", $Handle[$i])
    Next

    [/autoit]

    Frage ist nur, wie kann ich diese immer vergleichen?
    Die handle reinfolge etc ändert sich sobald ein neues Fenster exisitiert oder ähnliches. o_O

    Einmal editiert, zuletzt von Sen (7. Oktober 2010 um 13:33)

  • schau doch mal ob evtl die id gleich bleibt und dann mit

    [autoit]

    ControlGetHandle("[CLASS:ThunderRT5MDIForm]", "", controlId)

    [/autoit]

    aber so wie ich das verstehe handelt es sich hier doch um chatfenster eines chatprogrammes. Da ändern sich doch instance und ID nicht während der laufzeit? Oder worum geht es genau?

    was ist PlutoBubble oder spin?

    Einmal editiert, zuletzt von Milla (8. Oktober 2010 um 16:10)

  • Schon überlegt.
    Aber alle Versuche die ID abzufragen geben nur " " zurück.
    Auch Au3Info gib nichts zurück.

    Die Handle bleiben gleich, die Instancen verändern sich (sogar relativ fix, bei jeder aktualisierung?)

    Frage wäre wie ich die Handle die ich in einem Array habe

    Beispiel eines Arrays den ich abfragen kann:
    [0]|7 ;Anzahl Räume+Dias
    [1]|0x000F0776
    [2]|0x0009075A
    [3]|0x00030420
    [4]|0x00020644
    [5]|0x00040624
    [6]|0x00010714
    [7]|0x00010602

    Jedes Handle is ein Raum oder Dialog.
    Das Problem ist, wie kann ich diese jezt noch vergleichen?
    Beim abfragen ändert sich Reinfolge etc jedes mal o_O

  • Worum genau handelt es sich bei "Pluto Bubble"?
    Ist das jetzt ein Chatprogramm? dann müsste das mit der ID klappen


    Oder ein Chat im Internet?
    wenn ja -> Link,Screenshot,HTML-Code

  • "PlutoBubble" schimpft sich nur das Tool an dem ich arbeite.
    Ein Add-On für einen Chatclienten genannt "Pluto"

    Download: http://pluto.brain-killer.org/

    Das Problem ist halt das sich die Insancen jedes mal ändern, genau wie die Reinfolge der
    Handle wenn ich sie abfrage & die ID läss sich nicht abfragen (= "")