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
;==============================================================
; 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
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):
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)
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
For $i = 1 To UBound($Handle) - 1
$Text[$i] = ControlGetText($Handle[$i], "", $Handle[$i])
Next
Frage ist nur, wie kann ich diese immer vergleichen?
Die handle reinfolge etc ändert sich sobald ein neues Fenster exisitiert oder ähnliches. o_O