[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien

  • Tja, da kommt sie die Beta :D

    Heute habe ich die Beta des Programms auf den ersten Kollegen losgelassen, es komtm wie es kommen mußte ... Es gibt ein Problem.

    Der Kollege hat Kaspersky installiert :cursing: und jetzt kommt mein FTP nicht durch die firewall. Ich habe schon alle möglichen Rechte erteilt, aber das Kaspely will nicht. Irgendjemand eine Ahnung was wie und wo ich das Lösen kann?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Kenn mich mit Kaspersky leider garnicht aus, aber wenni ch das richtig in Erinnerung habe, haben wir bereits Ausnahmen und Vertrauen und was nicht alles hinzugefügt. Aber ich schau es mir nochmal an.

    Die WindowsFirewall ist jedenfalls deaktiviert, insofern kommt da auch keine Meldung.

    Ich könnte höchstens die WindowsWall mal aktivieren, in der Hoffnug, dass die Meldung kommt und Kasperle sich danach richtet.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ich habe eine grundlegende Aufbaufrage.

    Mein Programm besteht bisher aus der MainGui mit dem eigentlichen Programm und der OptionenGui in der die Userdaten und Einstellungen vorgenommen werden. Nun habe ich in der MainGui Elemente die sich immer wieder aktualisieren müssen, das hat aber zur Folge, dass das Programm zwischen durch nicht mehr erreichbar ist.

    Fall1:
    Die Überprüfung der Verbindung zum FTP-Server - solange die Verbindung steht ist die Funktion schnell abgearbeitet und es geht nicht viel Zeit verloren. Man mekrt es zwar aber es wäre noch OK. Wenn die Verbindung aber temporär Unterbrochen ist, ist das Programm für mehrere Sekunden blockiert.

    Fall2:
    Die Abfrage des ShoutCast-Servers - Auch hier muß die Anzeige ja in einem gewissen Abstand aktualisiert werden.

    Wie bewerkstelligt man sowas nun ohne das Programm an sich zu blockeiren?

    Meine Idee:
    Ich lagere die entsprechenden Funktionen in unabhängige Scripte aus die gemeinsam mit dem Programm gestartet werden. Diese schreiben ihre Ergebnisse dann in die config.ini aus der die Daten dann vom Hauptprogram im Workaround ausgelesen und ins GUI übernommen werden.

    Oder gibt es dafür eine bessere Lösung?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Dein "Problem" in Fall 2 lässt sich eigentlich durch AdlibRegister lösen, da es nur wenige Millisekunden dauern sollte die Informationen aus der Seite auszulesen und das Programm somit nicht blockiert werden würde.
    In Fall 1 kann man garantiert irgendwie die Verbindung überprüfen und darauf dann reagieren, ich kann dir dabei allerdings nicht helfen, da ich mit diesen Funktionen nie arbeite.

  • Hey zusammen :)

    Ich habe da mal wieder ne Frage.

    Mein Programm, bestehend aus Hauptfenster und Optionsfenster, handelt die beiden Fenster im Workaround. Bei Programmstart steht das Main auf "SHOW" und das Options auf "HIDE" über das folgende Teilscript wird das Options-Fenster ein- bzw. ausgeblendet.

    Spoiler anzeigen
    [autoit]

    #Region ### WORKAROUND ###
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]

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

    Case $hGuiMain ; ### Start Workaround MainGui
    Switch $nMsg[0]
    Case $sItemExit, $GUI_EVENT_CLOSE
    ExitLoop
    Case $sItemEinst
    GUISetState(@SW_SHOW, $hGuiMain)
    GUISetState(@SW_SHOW, $hGuiOpt)
    EndSwitch

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

    Case $hGuiOpt ; ### Start Workaround OptGui
    Switch $nMsg[0]
    Case 0
    ContinueLoop
    Case $sCancel, $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $hGuiMain)
    GUISetState(@SW_HIDE, $hGuiOpt)
    Case $Pic[0] To $Pic[UBound($Pic) - 1]
    If $nMsg[0] <> $Pic[$Item] Then
    GUICtrlSetImage($Pic[$Item], @ScriptDir & '\images\tab_deselected.jpg')
    GUICtrlSetcolor($Pic[$Item] + 1, 0xFFFFFF)
    GUICtrlSetImage($nMsg[0], @ScriptDir & '\images\tab_selected.jpg')
    GUICtrlSetcolor($nMsg[0] + 1, 0x313A42)
    $Item = _Index($nMsg[0])
    GUICtrlSendMsg($Tab, $TCM_SETCURFOCUS, $Item, 0)
    $Over = -1
    EndIf
    Case $sSave
    _SaveOptions()
    GUISetState(@SW_SHOW, $hGuiMain)
    GUISetState(@SW_HIDE, $hGuiOpt)
    EndSwitch
    EndSwitch
    WEnd
    #EndRegion ### WORKAROUND ###

    [/autoit]

    Jetzt habe ich das Problem, dass ich mit dem folgenden Teil das Options-Fenster abfragen muß obwohl es nicht aktiv ist (HIDE). Eigentlich dachte ich es würde reichen das im Main-Workaround nach dem GUISetState(@SW_SHOW, $hGuiOpt) einzufügen, aber auch hier scheint es nicht zu wirken.

    Spoiler anzeigen
    [autoit]

    $Info = GUIGetCursorInfo()
    If @error Then
    If $Over <> -1 Then
    GUICtrlSetImage($Pic[$Over], '..\images\tab_deselected.jpg')
    EndIf
    $Over = -1
    Else
    $Index = _Index($Info[4])
    If $Index <> $Over Then
    If $Over <> -1 Then
    GUICtrlSetImage($Pic[$Over], '..\images\tab_deselected.jpg')
    EndIf
    If ($Index <> -1) And ($Index <> $Item) Then
    GUICtrlSetImage($Pic[$Index], '..\images\tab_hoover.jpg')
    $Over = $Index
    Else
    $Over = -1
    EndIf
    EndIf
    EndIf

    [/autoit]

    Wie bekomme ich eine korrekte Ausgabe von GUIGetCurserInfo wenn das Fenster im HIDE-Modus ist?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Oh Sorry, das hatte ich in der Original schon eingetragen ($sGuiOpt)

    Ich bin auch gerade etwas irritiert, da es von 100 Versuchen einmal klappt und die anderenmale nicht. Da muß noch irgendwas anderes im argen sein, aber ich muß da wohl noch mal suchen.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Hat mich zwar man wieder ein paar Stunden meines Lebens gekostet, aber das Problem an sich konnte ich finden und lösen.

    Eine weitere Abfrageschleife hatte ich in einem falschen Bereich des Workaround platziert.

    Einzig eine unschöne, aber aktuell zu vernachlässigende Kleigkeit funktioniert nicht, denn die nötige Aktualisierung der Funktion findet verständlicher Weise erst statt, wenn man die Maus ein wenig bewegt. Aber auch das werde ich nch herausfinden :D

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Halllo Leutz,

    ich habe mal wieder ein echtes Denkproblem, für das es sicher eine elegate Lösung gibt.

    Diese Schleife soll die Funktion verlassen, wenn es nicht Samstag später als 05:50 Uhr oder Sonntag ist. Also von Montag 00:00 Uhr bis Samstag 05:50: Uhr. Aber immer fehlt mir der letzte Schritt und ich klammere entweder den Kompletten Samstag aus oder er ist er ist gänzlich mit drin.

    Spoiler anzeigen
    [autoit]


    #Region ### WOCHENTAG ABFRAGE ###
    $sWochentagHeute = _Weekdays()
    If Not ($sWochentagHeute = "Samstag" And (_TimeDefinition() > _TimeDefinition (5, 50))) or $sWochentagHeute = "Sonntag" Then
    If MsgBox(16, "Keine Nachrichten", "Heute ist " & $sWochentagHeute & @CRLF & @CRLF & "Bitte normale Nachrichten für " & @CRLF & "Montag bis Freitag aktualisieren!") = 1 Then Return 1
    EndIf
    _logfile("Wochentag: " & $sWochentagHeute)
    #EndRegion ### WOCHENTAG ABFRAGE ###

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

    • Offizieller Beitrag

    So:

    [autoit]


    #include <Date.au3>

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

    $iDayOfWeek = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sTime = @HOUR & @MIN
    If ($iDayOfWeek = 7 And $sTime > '0550') Or ($iDayOfWeek = 1) Then ; Samstag (nach 5:50 Uhr) oder Sonntag (ganztags)
    ConsoleWrite('Wochenende' & @CR)
    Else
    ConsoleWrite('Arbeitstag' & @CR)
    EndIf

    [/autoit]
  • Vielen Dank erstmal :)

    OK .... Aber ich achte mit "not" konnte ich das direkt lösen?

    Also nach dem Motto:
    Wenn es nicht Samstag und später als 05:50 Udr oder Sonntag ist, dann .....

    oder verstehe ich hier den Operator "Not" falsch?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

    • Offizieller Beitrag

    Ich habe keine Ahnung was Deine Funktion "_TimeDefinition()" macht oder welchen Wert sie zurückgibt, deshalb habe ich ein Script geschrieben, was jeder nachvollziehen kann. Das solltest Du Dir auch mal angewöhnen. Deine kleinen Schnipsel sind für sich nicht lauffähig und Du postest noch nicht mal alle benutzten Funktionen. Damit kann man Dir wenig helfen.
    Der Operator "Not" negiert einfach den nachfolgenden Ausdruck (bei Dir den in Klammern). Warum das aber nicht funktioniert, kann ich Dir nicht sagen, weil die erwähnte Funktion fehlt.

    Edit: Falls Du nur die Abfrage für "Arbeitstag" brauchst, kannst Du das auch so schreiben:

    [autoit]


    #include <Date.au3>

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

    $iDayOfWeek = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sTime = @HOUR & @MIN
    If Not ($iDayOfWeek = 7 And $sTime > '0550') And Not ($iDayOfWeek = 1) Then ; außer Samstag nach 5:50 Uhr oder Sonntag (ganztags)
    ConsoleWrite('Arbeitstag' & @CR)
    EndIf

    [/autoit]
  • OK, ich abe mich wohl falsch ausgedrückt. Mir geht es nciht unbedingt darum hier eine fertig Lösung präsentiert zu bekommen, vielmehr geht es mir darum zu verstehen warum und wie etwas funktioniert :)

    Hier also ein lauffähiges Script mit den beiden Funktionen die anderorts im Script schon verwendet werden und ich eben gern weiter nutzen möchte.

    Wenn ich das richtig verstehe müßte die Abfrage "If Not" - (Samstag und später als 05:50) oder nicht (Sonntag) dann .... außerhalb der Zeit eben das "Then" ausführen?

    Spoiler anzeigen
    [autoit]

    #Region ### WOCHENTAG ABFRAGE ###
    $sWochentagHeute = _Weekdays()
    If Not ($sWochentagHeute = "Samstag" And (_TimeDefinition() > _TimeDefinition (5, 50))) or not($sWochentagHeute = "Sonntag") Then
    MsgBox(16, "Keine Nachrichten", "Heute ist " & $sWochentagHeute & @CRLF & @CRLF & "Bitte normale Nachrichten für " & @CRLF & "Montag bis Freitag aktualisieren!")
    Else
    MsgBox(16, "Nachrichten", "News werden geladen")
    EndIf

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

    #EndRegion ### WOCHENTAG ABFRAGE ###

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

    #Region ### TIME DEFINITION ###
    Func _TimeDefinition($iHour=@HOUR, $iMin=@MIN)
    Return $iHour * 60 + $iMin
    EndFunc
    #EndRegion ### TIME DEFINITION ###

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

    #Region ### WEEKDAYS ###
    Func _Weekdays()
    Local $arWochentag = "Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag"
    $arWochentagSplit = StringSplit($arWochentag, "|")
    $sWochentag = $arWochentagSplit[@WDAY]
    Return $sWochentag
    EndFunc
    #EndRegion ### WEEKDAYS ###

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ok, so langsam glaube ich zu verstehen wie diese Verkettung funktioniert.

    Ich fasse grundsätzlich also den Samstag mit der Uhrzeit in Klammern zusammen zu einer Bedingung die an das If not gebunden ist, mit dem "And Not" füge ich eine zweite Bedingung hinzu die wieder eigenständig in Klamern gesetzt wird.

    Jaaa, ich glaub ich habs jetzt kapiert :D

    Danke Dir .. :)

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Hey Leute,

    ich habe nochmal eine Verständnisfrage.

    In meinem Programm laufen ja mittlerweie zwei Abfragen die in regelmäßigen Abständen, die einen Zugriff auf das Internet benötigen. Dabei kommt es aber ab und an zu Verzögerungen während derer das Programm nicht reagiert. Speziell wenn es zu einem Verbindungsproblem kommt kann das bis zu 7 Sekunden dauern.

    Meine Idee ist nun diese Abfragen in ein zweites Programm auszugliedern, das mit dem Hauptprogramm gestartet wird aber nicht zu sehen ist, also im HIDE-Modus Dieses Programm macht dann in regelmäigen Abständen die Überprüfungen und gibt sie an das Hauptprogramm weiter.

    Die Frage nun ob das eine machbre Lösung ist? Aktuell würde ich die Daten vom Zweitprogramm in eine Datei schreiben lassen und dort mit dem Hauptprogram immer wieder auslesen lassen.

    Gruß
    Anna

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Machbar ist das auf jedenfall.

    Du könntest es über Named Pipes machen oder über eukalyptus' Exchange Variables UDF :)

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski


  • In meinem Programm laufen ja mittlerweie zwei Abfragen die in regelmäßigen Abständen, die einen Zugriff auf das Internet benötigen.

    Bist dir wirklich sicher, dass diese regelmäßigen Abfragen wirklich brauchst? In den meisten Fällen ist das nämlich nicht nötig. Gerade deine Abfrage ob die Server online sind ist als regelmäßige Abfrage, meiner Meinung nach, Blödsinn, es reicht vollkommen das wenn bei einer Aktion bei der der Zugriff auf den Server gemacht wird der Onlinestatus geprüft wird.

    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.