Fritz!Box Telefon-dingsbums V5

Code:
Friend Sub AnrMonRING(ByVal FBStatus As String(), ByVal AnrMonAnzeigen As Boolean, ByVal StoppUhrAnzeigen As Boolean)
        ' wertet einen eingehenden Anruf aus
        ' Parameter: FBStatus (String ()):   Status-String der FritzBox
        '            anzeigen (Boolean):  nur bei 'true' wird 'AnrMonEinblenden' ausgeführt
        ' FBStatus(0): Uhrzeit
        ' FBStatus(1): RING, wird nicht verwendet
        ' FBStatus(2): Die Nummer der aktuell aufgebauten Verbindungen (0 ... n), dient zur Zuordnung der Telefonate, ID
        ' FBStatus(3): Eingehende Telefonnummer, TelNr
        ' FBStatus(4): Angerufene eigene Telefonnummer, MSN
        ' FBStatus(5): ???

        Dim Vorwahl As String = C_XML.Read("Optionen", "TBVorwahl", "")
        Dim checkstring As String = C_XML.Read("Telefone", "CLBTelNr", "-1") ' Enthällt alle MSN, auf die reagiert werden soll
        Dim MSN As String = CStr(FBStatus.GetValue(4))
        If hf.IsOneOf(hf.OrtsVorwahlEntfernen(MSN, Vorwahl), Split(checkstring, ";", , CompareMethod.Text)) Or AnrMonPhoner Then
            'Dimensionierung in die Abfrage geschoben, um eine unnötige Dimensionierung zu verhindern.

            Dim TelNr As String            ' ermittelte TelNr

            Dim Anrufer As String = vbNullString           ' ermittelter Anrufer
            Dim vCard As String = vbNullString           ' vCard des Anrufers
            Dim KontaktID As String = "-1;"           ' ID der Kontaktdaten des Anrufers
            Dim StoreID As String = "-1"           ' ID des Ordners, in dem sich der Kontakt befindet
            Dim ID As Integer            ' ID des Telefonats
            Dim index As Long              ' Zählvariable
            'Dim GefundenerKontakt As Outlook.ContactItem
            Dim rws As Boolean = False    ' 'true' wenn die Rückwärtssuche erfolgreich war
            Dim LandesVW As String = C_XML.Read("Optionen", "TBLandesVW", "0049")           ' eigene Landesvorwahl

            'Phoner
            Dim PhonerTelNr() As String
            ' Anruf nur anzeigen, wenn die MSN oder VoIP-Nr stimmt

            ID = CInt(FBStatus.GetValue(2))
            TelNr = CStr(FBStatus.GetValue(3))
            'Phoner
            If AnrMonPhoner Then
                Dim pos As Integer = InStr(TelNr, "@", CompareMethod.Text)
                If Not pos = 0 Then
                    TelNr = Left(TelNr, pos - 1)
                Else
                    PhonerTelNr = hf.TelNrTeile(TelNr)
                    If Not PhonerTelNr(1) = "" Then TelNr = PhonerTelNr(1) & Mid(TelNr, InStr(TelNr, ")", CompareMethod.Text) + 2)
                    If Not PhonerTelNr(0) = "" Then TelNr = PhonerTelNr(0) & Mid(TelNr, 2)
                End If
                TelNr = hf.nurZiffern(TelNr, LandesVW)
            End If
            ' Ende Phoner
            If Len(TelNr) = 0 Then TelNr = "unbekannt"
            MSN = CStr(FBStatus.GetValue(4))
            Dim letzterAnrufer() As String = {CStr(FBStatus.GetValue(0)), Anrufer, TelNr, MSN, StoreID, KontaktID}
            ' Der letzterAnrufer enthält in dieser Reihenfolge Uhrzeit, Anrufername, Telefonnummer, MSN, StoreID, KontaktID
            C_XML.Write("letzterAnrufer", "letzterAnrufer" & ID, Join(letzterAnrufer, ";"), False)
            ' Daten für Anzeige im Anrurfmonitor speichern
            C_XML.Write("letzterAnrufer", "Letzter", CStr(ID), False)
            If AnrMonAnzeigen Then
                If Not OlI.VollBildAnwendungAktiv Then
                    BWAnrMonEinblenden = New BackgroundWorker
                    BWAnrMonEinblenden.RunWorkerAsync(ID)
                End If
            End If

            ' Daten in den Kontakten suchen und per Rückwärtssuche ermitteln
            If Not TelNr = "unbekannt" Then
                Dim FullName As String = vbNullString
                Dim CompanyName As String = vbNullString
                ' Anrufer in den Outlook-Kontakten suchen
                If OlI.StarteKontaktSuche(KontaktID, StoreID, CBool(C_XML.Read("Optionen", "CBKHO", "True") = "True"), TelNr, "", LandesVW) Then
                    OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                    Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                    If CBool(C_XML.Read("Optionen", "CBIgnoTelNrFormat", "False")) Then TelNr = hf.formatTelNr(TelNr)
                Else
                    ' Anrufer per Rückwärtssuche ermitteln
                    If C_XML.Read("Optionen", "CBRueckwaertssuche", "False") = "True" Then
                        Dim RWSIndex As Boolean = CBool(C_XML.Read("Optionen", "CBRWSIndex", "True"))
                        If RWSIndex Then vCard = C_XML.Read("CBRWSIndex", TelNr, "")
                        If vCard = vbNullString Then
                            Select Case C_XML.Read("Optionen", "CBoxRWSuche", "0")
                                'Case "0"
                                '    rws = frmRWS.RWSGoYellow(TelNr, vCard)
                                Case "0"
                                    rws = frmRWS.RWS11880(TelNr, vCard)
                                Case "1"
                                    rws = frmRWS.RWSDasTelefonbuch(TelNr, vCard)
                                Case "2"
                                    rws = frmRWS.RWStelsearch(TelNr, vCard)
                                Case "3"
                                    rws = frmRWS.RWSAlle(TelNr, vCard)
                            End Select
                            'Im folgenden wird automatisch ein Kontakt erstellt, der durch die Rückwärtssuche ermittlt wurde. Dies geschieht nur, wenn es gewünscht ist.
                            If rws And C_XML.Read("Optionen", "CBKErstellen", "False") = "True" Then
                                KontaktFunktionen.ErstelleKontakt(KontaktID, StoreID, vCard, TelNr)
                                OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                                Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                            End If
                        Else
                            rws = True
                            vCard = Replace(vCard, "=0D", Chr(13), , , CompareMethod.Text)
                            vCard = Replace(vCard, "=0A", Chr(10), , , CompareMethod.Text)
                        End If

                        If rws And KontaktID = "-1;" Then
                            Anrufer = ReadFNfromVCard(vCard)
                            Anrufer = Replace(Anrufer, Chr(13), "", , , CompareMethod.Text)
                            If InStr(1, Anrufer, "Firma", CompareMethod.Text) = 1 Then Anrufer = Right(Anrufer, Len(Anrufer) - 5)
                            Anrufer = Trim(Anrufer)
                            vCard = Replace(vCard, Chr(13), "=0D", , , CompareMethod.Text)
                            vCard = Replace(vCard, Chr(10), "=0A", , , CompareMethod.Text)
                            If RWSIndex Then C_XML.Write("CBRWSIndex", hf.nurZiffern(TelNr, LandesVW), vCard, False)
                            KontaktID = "-1" & Anrufer & ";" & vCard
                        End If
                    End If
                    TelNr = hf.formatTelNr(TelNr)
                End If

                letzterAnrufer(1) = Anrufer
                letzterAnrufer(2) = TelNr
                letzterAnrufer(5) = KontaktID
                letzterAnrufer(4) = StoreID
                C_XML.Write("letzterAnrufer", "letzterAnrufer" & ID, Join(letzterAnrufer, ";"), True)

                ' Daten im Menü für Rückruf speichern
                index = CLng(C_XML.Read("AnrListe", "Index", "0"))

                If Not Split(C_XML.Read("AnrListe", "AnrListeEintrag" & Trim(Str((index + 9) Mod 10)), ";"), ";", 5, CompareMethod.Text)(1) = TelNr Then
                    Dim StrArr() As String = {Anrufer, TelNr, FBStatus(0), CStr((index + 1) Mod 10), StoreID, KontaktID}
                    C_XML.Write("AnrListe", "AnrListeEintrag" & index, Join(StrArr, ";"), False)
                    C_XML.Write("AnrListe", "Index", CStr((index + 1) Mod 10), True)
#If OVer < 14 Then
                    If C_XML.Read( "Optionen", "CBSymbAnrListe", "False") = "True" Then GUI.FillPopupItems("AnrListe")
#End If
                End If
            End If
            'StoppUhr
            If StoppUhrAnzeigen Then
                With STUhrDaten(ID)
                    .Richtung = "Anruf von:"
                    If Anrufer = "" Then
                        .Anruf = TelNr
                    Else
                        .Anruf = Anrufer
                    End If
                End With
            End If
            ' Daten für den Journaleintrag sichern
            If C_XML.Read("Optionen", "CBJournal", "False") = "True" Or StoppUhrAnzeigen Then
                NeuerJournalEintrag(ID, "Eingehender Anruf von", CStr(FBStatus.GetValue(0)), MSN, TelNr, KontaktID, StoreID)
            End If
        End If

    End Sub '(AnrMonRING)

Ja in der Funktion tritt eine IndexOutOfRangeException auf. aber wo nur? Wer den Fehler findet, kriegt ein Eis.
 
Ich tippe auf einen der vielen GetValues. Es könnte nicht schaden über (FBStatus.Length - 1) zu prüfen ob auch tatsächlich die geforderten 4 Parameter übergeben werden und sonst ggf. aussteigen.
Damit du nicht überall einzelne Try/Catch drum basteln musst um die Zeile zu ermitteln kannst du einfach noch die einfachen Debuginformationen PDB mit generieren und ausliefern, dann sollte nicht nur die Funktion sondern der konkret fehlgeschlagene Befehl mit in der Fehlerausgabe stehen.
Try/Catch fetzt natürlich um im Bedarfsfall das Addin nach einer Fehlermeldung einfach bis zum Neustart zu deaktivieren (globale Exception-Handler funktionieren glaube ich mit VSTO nicht, kann mich da aber mangels Erfahrung auch irren).
Nicht das mich gerade jemand anruft, wenn ich meine 3 Seiten Mail fertig geschrieben habe und dann macht es "rums" (ja ich weiß, es gibt auch eine automatische Speicherung in den Entwürfen, aber so prinzipiell).

Simon
 
Zuletzt bearbeitet:
Also im Anzeigefenster werden noch Uhrzeit, Eingehende Telefonnummer, Apparat und Anrufer angezeigt.
Somit sollten also die FBStatus ausgelesen werden… *schulterzucken*
In Zeile setzt Du mit Dim Anrufer As String = vbNullString Anrufer auf einen Leerstring.
In Zeile 51 nutzt Du die Variabel ohne sie noch einmal zu füllen. Kann das ein Problem sein???

Sonst schick mit die exe/dll? mit MsgBox in jeder relevanten Zeile. Ich sag Dir dann, wieweit sie durchläuft und welche Werte noch angezeigt werden.

Axim
 
Zuletzt bearbeitet:
Danke für die Anregungen.

Ich bin mir gerade nicht so sicher woran es alles liegen kann und woran nicht.

Idee: Nach dem Absturz: ini-Datei öffnen und den Eintag "letzterAnrufer" suchen. Warum? Der wert wird einmal vor der ganzen Auswertung geschrieben und einmal danach. (Über die Sinnhaftigkeit lässt sich streiten, ich glaub das brauch ich für den Anrufmonitor so).

Als erstes Element muss die Uhrzeit stehen, danach Anrufer, Telefonnummer, MSN, StoreID, KontaktID. Sind alle Werte, außer Uhrzeit und Telefonnummer, Leerstrings oder "-1", dann folgt die fehlerhafte Anweisung noch.
Zur Fehlereingrenzung ist jetzt die Suche nach den Kontakten interessant. Dies geschieht in folgender Anfrage. Oli ist übrigends das OutlookInterface. Darin werden alle Abfragen die mit Outlook direkt zu tun haben abgearbeitet. Die Frage ist folgende. Gibt es den Anrufer in den Kontakten, oder ist eine Rückwärtssuche erforderlich. Ist diese eingeschaltet (11880 ist die einzige die geht.). Soll ein Kontakt automatisch erstellt werden?

Code:
                If OlI.StarteKontaktSuche(KontaktID, StoreID, CBool(C_XML.Read("Optionen", "CBKHO", "True") = "True"), TelNr, "", LandesVW) Then
                    OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                    Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                    If CBool(C_XML.Read("Optionen", "CBIgnoTelNrFormat", "False")) Then TelNr = hf.formatTelNr(TelNr)
                Else
                    ' Anrufer per Rückwärtssuche ermitteln
                    If C_XML.Read("Optionen", "CBRueckwaertssuche", "False") = "True" Then
                        Dim RWSIndex As Boolean = CBool(C_XML.Read("Optionen", "CBRWSIndex", "True"))
                        If RWSIndex Then vCard = C_XML.Read("CBRWSIndex", TelNr, "")
                        If vCard = vbNullString Then
                            Select Case C_XML.Read("Optionen", "CBoxRWSuche", "0")
                                'Case "0"
                                '    rws = frmRWS.RWSGoYellow(TelNr, vCard)
                                Case "0"
                                    rws = frmRWS.RWS11880(TelNr, vCard)
                                Case "1"
                                    rws = frmRWS.RWSDasTelefonbuch(TelNr, vCard)
                                Case "2"
                                    rws = frmRWS.RWStelsearch(TelNr, vCard)
                                Case "3"
                                    rws = frmRWS.RWSAlle(TelNr, vCard)
                            End Select
                            'Im folgenden wird automatisch ein Kontakt erstellt, der durch die Rückwärtssuche ermittlt wurde. Dies geschieht nur, wenn es gewünscht ist.
                            If rws And C_XML.Read("Optionen", "CBKErstellen", "False") = "True" Then
                                KontaktFunktionen.ErstelleKontakt(KontaktID, StoreID, vCard, TelNr)
                                OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                                Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                            End If
                        Else
                            rws = True
                            vCard = Replace(vCard, "=0D", Chr(13), , , CompareMethod.Text)
                            vCard = Replace(vCard, "=0A", Chr(10), , , CompareMethod.Text)
                        End If

                        If rws And KontaktID = "-1;" Then
                            Anrufer = ReadFNfromVCard(vCard)
                            Anrufer = Replace(Anrufer, Chr(13), "", , , CompareMethod.Text)
                            If InStr(1, Anrufer, "Firma", CompareMethod.Text) = 1 Then Anrufer = Right(Anrufer, Len(Anrufer) - 5)
                            Anrufer = Trim(Anrufer)
                            vCard = Replace(vCard, Chr(13), "=0D", , , CompareMethod.Text)
                            vCard = Replace(vCard, Chr(10), "=0A", , , CompareMethod.Text)
                            If RWSIndex Then C_XML.Write("CBRWSIndex", hf.nurZiffern(TelNr, LandesVW), vCard, False)
                            KontaktID = "-1" & Anrufer & ";" & vCard
                        End If
                    End If
                    TelNr = hf.formatTelNr(TelNr)
                End If

Da ist mir gerade ein ganz problematische Stelle aufgefallen:

Code:
        Dim checkstring As String = C_XML.Read("Telefone", "[COLOR="#FF0000"]CLBTelNr[/COLOR]", "-1") ' Enthällt alle MSN, auf die reakiert werden soll
        Dim MSN As String = CStr(FBStatus.GetValue(4))
        If hf.[COLOR="#0000FF"]IsOneOf[/COLOR](hf.OrtsVorwahlEntfernen(MSN, Vorwahl), Split(checkstring, ";", , CompareMethod.Text)) Or AnrMonPhoner Then

Was steht da drin? Wenn es den Eintrag nicht gibt, dann ist das der Fehler, da der Defaultwert "-1", kein Semikolon enthält. Dann könnte "IsOneOf" auf die Nase fallen (Ich bin mir da nicht sicher). Auch wenn es das nicht unbedingt sein muss, werde ich diese Gefahrenstelle beseitigen.

Ich hoffe ich höre von euch.

Zum abschluss eine minimal aufgeräumtere AnrMonRING

Code:
    Friend Sub AnrMonRING(ByVal FBStatus As String(), ByVal AnrMonAnzeigen As Boolean, ByVal StoppUhrAnzeigen As Boolean)
        ' wertet einen eingehenden Anruf aus
        ' Parameter: FBStatus (String ()):   Status-String der FritzBox
        '            anzeigen (Boolean):  nur bei 'true' wird 'AnrMonEinblenden' ausgeführt
        ' FBStatus(0): Uhrzeit
        ' FBStatus(1): RING, wird nicht verwendet
        ' FBStatus(2): Die Nummer der aktuell aufgebauten Verbindungen (0 ... n), dient zur Zuordnung der Telefonate, ID
        ' FBStatus(3): Eingehende Telefonnummer, TelNr
        ' FBStatus(4): Angerufene eigene Telefonnummer, MSN
        ' FBStatus(5): ???

        Dim Vorwahl As String = C_XML.Read("Optionen", "TBVorwahl", "")
        Dim checkstring As String = C_XML.Read("Telefone", "CLBTelNr", ";") ' Enthällt alle MSN, auf die reagiert werden soll

        Dim MSN As String = CStr(FBStatus.GetValue(4))
        ' Anruf nur anzeigen, wenn die MSN stimmt
        If hf.IsOneOf(hf.OrtsVorwahlEntfernen(MSN, Vorwahl), Split(checkstring, ";", , CompareMethod.Text)) Or AnrMonPhoner Then

            Dim TelNr As String            ' ermittelte TelNr
            Dim Anrufer As String = vbNullString           ' ermittelter Anrufer
            Dim vCard As String = vbNullString           ' vCard des Anrufers
            Dim KontaktID As String = "-1;"           ' ID der Kontaktdaten des Anrufers
            Dim StoreID As String = "-1"           ' ID des Ordners, in dem sich der Kontakt befindet
            Dim ID As Integer            ' ID des Telefonats
            Dim index As Long              ' Zählvariable
            Dim rws As Boolean = False    ' 'true' wenn die Rückwärtssuche erfolgreich war
            Dim LandesVW As String = C_XML.Read("Optionen", "TBLandesVW", "0049")           ' eigene Landesvorwahl
            Dim letzterAnrufer(5) As String

            ID = CInt(FBStatus.GetValue(2))
            TelNr = CStr(FBStatus.GetValue(3))
            'MSN = CStr(FBStatus.GetValue(4))  'Ist doch schon belegt
            ' Phoner
            If AnrMonPhoner Then
                Dim PhonerTelNr() As String
                Dim pos As Integer = InStr(TelNr, "@", CompareMethod.Text)
                If Not pos = 0 Then
                    TelNr = Left(TelNr, pos - 1)
                Else
                    PhonerTelNr = hf.TelNrTeile(TelNr)
                    If Not PhonerTelNr(1) = "" Then TelNr = PhonerTelNr(1) & Mid(TelNr, InStr(TelNr, ")", CompareMethod.Text) + 2)
                    If Not PhonerTelNr(0) = "" Then TelNr = PhonerTelNr(0) & Mid(TelNr, 2)
                End If
                TelNr = hf.nurZiffern(TelNr, LandesVW)
            End If
            ' Ende Phoner

            If Len(TelNr) = 0 Then TelNr = "unbekannt"
            'Dim letzterAnrufer() As String = {CStr(FBStatus.GetValue(0)), Anrufer, TelNr, MSN, StoreID, KontaktID}
            letzterAnrufer(0) = CStr(FBStatus.GetValue(0))
            letzterAnrufer(1) = Anrufer
            letzterAnrufer(2) = TelNr
            letzterAnrufer(3) = MSN
            letzterAnrufer(4) = StoreID
            letzterAnrufer(5) = KontaktID
            ' Daten für Anzeige im Anrurfmonitor speichern
            ' Der letzterAnrufer enthält in dieser Reihenfolge Uhrzeit, Anrufername, Telefonnummer, MSN, StoreID, KontaktID
            C_XML.Write("letzterAnrufer", "letzterAnrufer" & ID, Join(letzterAnrufer, ";"), False)
            C_XML.Write("letzterAnrufer", "Letzter", CStr(ID), False)
            If AnrMonAnzeigen Then
                If Not OlI.VollBildAnwendungAktiv Then
                    BWAnrMonEinblenden = New BackgroundWorker
                    BWAnrMonEinblenden.RunWorkerAsync(ID)
                End If
            End If

            ' Daten in den Kontakten suchen und per Rückwärtssuche ermitteln
            If Not TelNr = "unbekannt" Then
                Dim FullName As String = vbNullString
                Dim CompanyName As String = vbNullString
                ' Anrufer in den Outlook-Kontakten suchen
                If OlI.StarteKontaktSuche(KontaktID, StoreID, CBool(C_XML.Read("Optionen", "CBKHO", "True") = "True"), TelNr, "", LandesVW) Then
                    OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                    Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                    If CBool(C_XML.Read("Optionen", "CBIgnoTelNrFormat", "False")) Then TelNr = hf.formatTelNr(TelNr)
                Else
                    ' Anrufer per Rückwärtssuche ermitteln
                    If C_XML.Read("Optionen", "CBRueckwaertssuche", "False") = "True" Then
                        Dim RWSIndex As Boolean = CBool(C_XML.Read("Optionen", "CBRWSIndex", "True"))
                        If RWSIndex Then vCard = C_XML.Read("CBRWSIndex", TelNr, "")
                        If vCard = vbNullString Then
                            Select Case C_XML.Read("Optionen", "CBoxRWSuche", "0")
                                Case "0"
                                    rws = frmRWS.RWS11880(TelNr, vCard)
                                Case "1"
                                    rws = frmRWS.RWSDasTelefonbuch(TelNr, vCard)
                                Case "2"
                                    rws = frmRWS.RWStelsearch(TelNr, vCard)
                                Case "3"
                                    rws = frmRWS.RWSAlle(TelNr, vCard)
                            End Select
                            'Im folgenden wird automatisch ein Kontakt erstellt, der durch die Rückwärtssuche ermittlt wurde. Dies geschieht nur, wenn es gewünscht ist.
                            If rws And C_XML.Read("Optionen", "CBKErstellen", "False") = "True" Then
                                KontaktFunktionen.ErstelleKontakt(KontaktID, StoreID, vCard, TelNr)
                                OlI.KontaktInformation(KontaktID, StoreID, FullName:=FullName, CompanyName:=CompanyName)
                                Anrufer = Replace(FullName & " (" & CompanyName & ")", " ()", "")
                            End If
                        Else
                            rws = True
                            vCard = Replace(vCard, "=0D", Chr(13), , , CompareMethod.Text)
                            vCard = Replace(vCard, "=0A", Chr(10), , , CompareMethod.Text)
                        End If

                        If rws And KontaktID = "-1;" Then
                            Anrufer = ReadFNfromVCard(vCard)
                            Anrufer = Replace(Anrufer, Chr(13), "", , , CompareMethod.Text)
                            If InStr(1, Anrufer, "Firma", CompareMethod.Text) = 1 Then Anrufer = Right(Anrufer, Len(Anrufer) - 5)
                            Anrufer = Trim(Anrufer)
                            vCard = Replace(vCard, Chr(13), "=0D", , , CompareMethod.Text)
                            vCard = Replace(vCard, Chr(10), "=0A", , , CompareMethod.Text)
                            If RWSIndex Then C_XML.Write("CBRWSIndex", hf.nurZiffern(TelNr, LandesVW), vCard, False)
                            KontaktID = "-1" & Anrufer & ";" & vCard
                        End If
                    End If
                    TelNr = hf.formatTelNr(TelNr)
                End If

                letzterAnrufer(1) = Anrufer
                letzterAnrufer(2) = TelNr
                letzterAnrufer(4) = StoreID
                letzterAnrufer(5) = KontaktID
                C_XML.Write("letzterAnrufer", "letzterAnrufer" & ID, Join(letzterAnrufer, ";"), True)

                ' Daten im Menü für Rückruf speichern
                index = CLng(C_XML.Read("AnrListe", "Index", "0"))

                If Not Split(C_XML.Read("AnrListe", "AnrListeEintrag" & Trim(Str((index + 9) Mod 10)), ";"), ";", 5, CompareMethod.Text)(1) = TelNr Then
                    Dim StrArr() As String = {Anrufer, TelNr, FBStatus(0), CStr((index + 1) Mod 10), StoreID, KontaktID}
                    C_XML.Write("AnrListe", "AnrListeEintrag" & index, Join(StrArr, ";"), False)
                    C_XML.Write("AnrListe", "Index", CStr((index + 1) Mod 10), True)
#If OVer < 14 Then
                    If C_XML.Read( "Optionen", "CBSymbAnrListe", "False") = "True" Then GUI.FillPopupItems("AnrListe")
#End If
                End If
            End If
            'StoppUhr
            If StoppUhrAnzeigen Then
                With STUhrDaten(ID)
                    .Richtung = "Anruf von:"
                    If Anrufer = "" Then
                        .Anruf = TelNr
                    Else
                        .Anruf = Anrufer
                    End If
                End With
            End If
            ' Daten für den Journaleintrag sichern
            If C_XML.Read("Optionen", "CBJournal", "False") = "True" Or StoppUhrAnzeigen Then
                NeuerJournalEintrag(ID, "Eingehender Anruf von", CStr(FBStatus.GetValue(0)), MSN, TelNr, KontaktID, StoreID)
            End If
        End If

    End Sub '(AnrMonRING)
 
So, gleich mal reingeschaut:

Uhrzeit - ok
Anrufer - ok
Telefonnummer - ok
MSN - ok
StoreID - ok (sehr lange Hexazahl)
KontaktID - ok (sehr lange Hexazahl)

Das ist aber die 3 Zeile in Abschnitt mit "letzterAnrufer 0=".
Eine Zeile vorher steht nur: "Letzter=0", sonst nichts. ???
In der ersten Zeile steht wieder was mit "letzterAnrufer 25" und ein alten Datum. Also die 25 ist vor der 0.


Mal ins Backup geschaut, als noch alles lief zeigt mir, dass der Abschnitt [letzterAnrufer] immer 3 Zeilen hat, wobei bei den Zeilen 1 und 3 unterschiedliche Anrufer enthalten sind. Zweite Zeile scheint ein Index zu sein.
In der jetzigen Listen.ini sieht dies anders aus!
Es gibt mehr Zeilen. Die 4 Zeile hat im Namen ein Zeilenumbruch.
letzterAnrufer 2=23.07.13 13:20:00; (Auto Top Gallery GmbH
);(01 93) 1 00;030xxxxxxxx;0000000038A....;000...
danach kommt wieder eine normale Zeile "letzterAnrufer 1=...". Dies ist die letzte Zeile.

Viele Grüße.

Nachtrag:

Ich habe jetzt die Zeilen 4 usw. rausgelöscht und noch mal probiert.
Ergebnis: In Zeile 3 wird der aktuelle Anruf eingetragen, wieder mit "letzterAnrufer 0", in der ersten Zeile ändert sich nichts. Der alte Anruf vom Juli bleibt bestehen unter "letzterAnrufer 25".
Das war doch wohl genau Deine Frage Gert, oder?


Nachtrag2:
Ich habe jetzt auch im Abschnitt [AnrListe] diesen komischen Zeilenumbruch von den einen Anrufer rausgenommen.
Outlook Neustart einmal ganz ohne Listen.ini, dann mit der korrigierten Version.
ES GEHT WIEDER!!!! *hura, hüff, porzelbaumschlagen*



Werde ich nun weiter beobachten.
Schein ein Problem durch die Rückwärtssuche zu sein, wo Strings reinkommen die die INI-Datei durcheinander würfeln.

Gruß Axim
 
Zuletzt bearbeitet:
Ich wurschtel mich mal durch deinen Post in Hellviolett :silly:
So, gleich mal reingeschaut:

Uhrzeit - ok
Anrufer - ok
Telefonnummer - ok
MSN - ok
StoreID - ok (sehr lange Hexazahl) Eindeutige Zuordnung des Kontakordners in Outlook
KontaktID - ok (sehr lange Hexazahl) Eindeutige Zuordnung des Kontakts aus Outlook Mit StoreID und KontaktID kann ich den Outlookkontakt addressieren. Alles ist gut.

Das ist aber die 3 Zeile in Abschnitt mit "letzterAnrufer 0=".
Eine Zeile vorher steht nur: "Letzter=0", sonst nichts. ??? Das ist so in Ordnung. Die 0 gibt an, welcher der wirklich letzte Anrufer ist. Hintergrund: es können Anrufe gleichzeitig geführt werden. Dann ist Letzter=1
In der ersten Zeile steht wieder was mit "letzterAnrufer 25" und ein alten Datum. Die 25 wird beim Journalimport verwendet. Also die 25 ist vor der 0. Hä?


Mal ins Backup geschaut, als noch alles lief zeigt mir, dass der Abschnitt [letzterAnrufer] immer 3 Zeilen hat, wobei bei den Zeilen 1 und 3 unterschiedliche Anrufer enthalten sind. Zweite Zeile scheint ein Index zu sein.
In der jetzigen Listen.ini sieht dies anders aus!
Es gibt mehr Zeilen. Die 4 Zeile hat im Namen ein Zeilenumbruch. Das klingt sehr verdächtig.

danach kommt wieder eine normale Zeile "letzterAnrufer 1=...". Dies ist die letzte Zeile.

Viele Grüße.
Schick mir sonst mal diese inis zu.

Den ganzen Abschnitt [letzterAnrufer] kann man getrost löschen. Der ist eigentlich nur dafür da, dass mit dem Klick auf Anzeigen im Anrufmonitor auch etwas sinnvolles steht.

Edit:
Zu Nachtrag:

letzterAnrufer 0 wird immer verwendet, wenn momentan nur ein (1) Anruf eingeht. Die ID Null (0) wird von der Fritz!Box vorgegeben. Wenn "letzterAnrufer 1" dann geht ein weiterer Anruf ein (ID=2)

Zu Nachtrag2:

Ja das ist durchaus ein Problem. Da ich momentan sowieos das ganze Prozedere von ini auf xml umstelle, wird das sowieso alles anders. Dennoch muss das Problem mit dem Zeienumbruch geklärt werden. (Eigentlich werden die sogar schon entfernt. Sehr seltsam. Da muss ich wohl eine überprüfung einbauen).

---

Erklärt das jetzt die Abstürze beim RING? Jedes mall wird die Rückrufliste neu geschrieben, was den Absturz verursachen könnte.
 
Zuletzt bearbeitet:
Erklärt das jetzt die Abstürze beim RING? Jedes mall wird die Rückrufliste neu geschrieben, was den Absturz verursachen könnte.

Würde sagen, JA.
Der Absturz kam mit den verarbeiten der INI-Datei.
Wer weis was das für ein "Superzeichen" war. Neuerdings werden ja auch Zeichen höher als 256 genommen um "hübsch auszusehen".
Filter rein mit Positivliste. a-z, äöü, A-Z, ÄÖÜ, ".-+" fertig. ;-)
Manche wandeln ja alles base64 um. Nur dann kann man Garnichts mehr lesen.

Schönes, langes Wochenende!

Axim
 
letzterAnrufer 2=23.07.13 13:20:00; (Auto Top Gallery GmbH
);(01 93) 1 00;....

Also ein Eintrag von der RWS. Soll ich noch die Nummer versuchen zu finden?

Noch eine Kleinigkeit: Ich bringe ja gerade mein Journal auf den aktuellen Stand. Immer wenn ich selber anrufe (VoIP) bleibt der Import hängen. Habe ich erst mal mit Etappen-Import umgangen. Muss man nur wissen, das es dort hängt.

Edit:
Scheint ein Anruf aus der Schweiz gewesen zu sein. Ob auf der deutschen oder schweizer Nummer kann ich nicht mehr sagen. Die FB hat kein Eintrag in der Anruferliste hinterlassen. Dingsbums hat aber ein autom. Eintrag in die Kontakte gemacht. Im String war wohl auch eine Emailadresse mit @ und irgendein Werbeverbot "Wünscht keine Werbung\"...
Das Ü von Wünscht ist durch den Codierung-Mischmasch UTF->ANSI "auf der Strecke geblieben" und hat wohl so mit diesen Zeichen FB und Dingsbums "gekillt".
Gleichzeitig kam auch noch eine SMS-Nachricht (Ansage) mit der Nummer 01931 00 rein. Was das noch mit ausgelöst hat, kann ich nicht sagen.
 
Zuletzt bearbeitet:
Mittlerweile hat sich meine Meinung/Bedenken bezüglich Spenden etc. gewandelt. Es ist viel Zeit und Arbeit, die allein mit Spaß an der Freude und warmer Luft nicht mehr gerechtfertigt ist.
Bedenken habe ich immernoch. Bezüglich vorhandenen Code, den ich nicht selber geschrieben habe.

Ich werde den Button mal einfügen. Hauptsache ich werde dadurch nicht reich :)
 
Aktueller Stand:

Wic ich ja bereits erwähnte bin ich weg von der ini-Datei gegangen. Ziel war einfach weniger Dateisystemzugriffe zu haben, den Code etwas zu verschlanken, damit es etwas stabiler läuft und einfach weniger Code (z.B. Schleifen) um an die richtige Information zu kommen. Nachdem sich das Chaos lichtet, sehe ich auch wieder Licht am ende des Tunnels. Ich habe aber die dumme Ahnung, dass es sich um ein Zug handelt. Es funktioniert noch nicht wieder alles aber da bin ich guter Dinge, dass das irgendwann alles wieder läuft.

  • Erstellung von Methoden, die das Auslesen und schreiben von XML-Dateien ermöglicht. Sowas gibt es sicher schon irgendwo, aber wenn ich nicht weiß wie die arbeiten nützt mir das nicht viel.
  • Umstellung auf XML
  • Anpassen des Codes, damit auch von XML ein Effekt erkennbar ist.
  • Einlesen der Telefone macht mir Sorgen. Konkretes Problem sind wiedermal die alten Firmware-Versionen der Fritz!Box.
  • Anrufmonitor läuft
  • Wählen funktioniert
  • Journalimport funktioniert
  • Wahlwiederholung, Rückruf, VIP-Listen funktioniert
  • Ungetestet auf Office 2003, 2007, 2013
  • Wo auch immer man hinschaut sieht man Problemstellen
 
Zuletzt bearbeitet:
Mach es dir mit dem XML doch nicht so kompliziert :)
Da du nur deine eigenen Einstellungen benötigst (machst ja kein Import) ist es am Einfachsten eine Klasse zu schreiben, in der die kompletten Einstellungen hinterlegt werden. Dann gibt es ein globales Einstellungsobjekt, dieses brauchst du dann nur noch zu serialisieren (= Objekt als XML abspeichern) oder wieder in Objektform zu bringen.
Ein guter Ansatzpunkt zum Abgucken und Verstehen findet sich z. B. hier.

Frohes Schaffen,
Simon
 
Daas mag ja alles sein, aber ich bin schon so weit damit :) es fehlt nur noch kleinkram und wenn ich meine klassen selber schreibe, weiß ich wenigstens was sie tun. bzw. was nicht :D Die Einstellungen sind das kleinere Problem. Irgendwann wird alles fertsch sein.
 
Ich bin wieder ein großes Stück näher an der nächsten Version.

Mittlerweile funktioniert alles soweit ganz flüssig und gut. Diverse Bugs, die noch so rumflogen habe ich auch noch entfernt. Es sind sicher noch genügend vorhanden. Die Testphase beginnt bald.

Zum Thema Spenden:

Ich hab alles wieder zurückgenommen. Tja man sollte sich vorher schlau machen. Als Provatperson, darf man keine Spenden erhalten. Gewerbeanmeldung, Versteuern der Spendeneinnahmen usw. Alles hat einen Rattenschwanz. Da bleibt es halt so wie es war.
 
Hi Gert, aber einen Wunschzettel bei Amazon darf jeder haben... :) LG, Ralf.
 
Version getestet

[Edit Novize: Überflüssiges Fullquote des Beitrags direkt darüber gelöscht - siehe Foren-Regeln]

Habe auf XP PRO, Olk2010 x86, Dingsda neuste Version installiert. Ist für mich für mich die erste Version die im DEbug fehlerfrei mit der FB7270V2 os 05.51 kommuniziert. Allerdings werden kein Journal und die Telefone auch nicht runter geladen. Ist ein super Tool. Super Ansätze.

Viele Grüße

A. Wolf
 
Wärest du bereit mich bei der Fehlersuche zu unterstützen?

Es wäre sehr hilfreich wenn du deine Probleme nochmal genau beschreibst. Auch wenn du explizit mal hinschreibst welche Version du verwendet hast (Vermutlich die 3.6 vom 03.11.13).
Der Journalimport geht übrigends schief, wenn keine Telefone importiert wurden. Daher würde ich mich gerne auf diesen Fehler stürzen.

Kannst du mir ein paar mehr Informationen geben?
 
[Edit Novize: Überflüssiges Fullquote des Beitrags direkt darüber gelöscht - siehe Foren-Regeln]

Gerne. Was wird noch benötigt? An der FB sind 3 Dect Telefone und 2 Android FB Phone Clients registriert. VOIP wird nicht genutzt. Die FB ist eine internationale Version, eingestellt auf Deutsche Sprache. Call Monitor aktiviert, läuft mit ander SW problemlos. Version war die 3.6. Alle anderen hatten bei der Debug Fkt Fehler gemeldet. FB hat nur Passwort, keinen usr.

Viele Grüße

A. Wolf
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.