Countdown mit Minuten:Sekunden

  • Hallo Forum,


    ich bin neu was Autoit angeht und auch mit Skripten habe ich nicht viel Erfahrung.

    Ich möchte gern ein Countdown-Fenster, der nach z.B. 5 min ein Programm aufruft oder den PC runterfährt.....


    Gefunden habe ich dieses Beispiel, mit dem es eigentlich geht - nur zählt er halt "nur" Sekunden runter - ich hätte aber gern mm:ss .... ich hab zwar noch jede Menge Beispiele gefunden, die aber zu umfangreich sind und ich verstehe diese auch nicht wirklich, um den "passenden Teil" zu übernehmen. ;(


    Hier der Code mit "reinen Sekunden":


    Ich würde gern statt der Sekunden die Anzeige in mm:ss - ohne viel drum rum usw. - so schwer kann es doch wohl nicht sein - leider bin ich zu unerfahren.:(


    Vielen Dank schon mal und Grüße


    Sven

  • So:

  • Nur kurz zur Erklärung, was Oskar hier gemacht hat. Das ist elementare Mathematik. Die entscheidenden Zeilen sind 22 und 23.

    Im Prinzip wird hier zwei Mal die aktuelle Sekundenzahl durch 60 (also eine Minute) dividiert. Nur werden zwei unterschiedliche Teile dieser Operation verwendet. In Zeile 22 wird einfach "normal" dividiert und das Ergebnis zu einer Ganzzahl gecastet. Das sorgt - im Gegensatz zum Runden - dafür, dass alle Nachkommastellen abgeschnitten werden. Aus 23,99 wird also 23. Das ist dann hier die Anzahl ganzer Minuten. Bei 150 Sekunden kommt da also 2 raus.

    In Zeile 23 wird dann nur der Rest der Division verwendet. Das nennt man Modulo-Division (Division mit Rest). Das ist bei uns dann die Anzahl der "übrigen" Sekunden, die keine ganze Minute mehr ergeben. Im konkreten Beispiel von 150 Sekunden also 30 Sekunden. Das wird in der Mathematik auch als 150 mod 60 und in der Informatik als 150 % 60 geschrieben.


    Nur so als Randinfo, bevor du einfach C&P machst und nichts lernst. ^^

  • Du bist so gut zu mir :thumbup::)


    Ich habe jetzt eine Schaltfläche eingefügt, die beim anklicken den Countdown beenden soll - weis jetzt aber nicht so recht, wo bzw. wie ich diese Schaltfläche "abprüfen" kann - wäre schön, wenn Du mir hier auch "auf die Sprünge" helfen könntest - hier mein bisheriger code:


    Vielen herzlichen Dank auch


    Sven

  • So:

  • Das erinnert mich an eine Funktion zum formatierten Ausgeben von Sekundenwerten, die ich mal erstellt hatte:


  • Dank Oscars Hilfe funktioniert es jetzt eigentlich ganz gut - nur bin ich jetzt auf das nächste Problem gestoßen und finde keine Lösung. :/


    Das Färben der "normalen" Buttons funktioniert wie es soll. Jetzt habe ich aber einen Butten mit "Zeilenumbruch" - der Zeilenumbruch funktioniert solange bis ich die Farbe ändern will - dann schreibt er den Text in eine Zeile. Hier mein bisheriger Code - Zeile 25 soll die Schriftfarbe oder Hintergrundfarbe ändern, machts aber nicht ;(


  • Mit dem Button wirst du kein Glück haben mit dem einfärben.

    https://www.autoitscript.com/f…g-bkcolor/#comment-818666


    Im Post geht es zwar um die HIntergrundfarbe aber siehe Post 2

  • Im Post4 ist aber doch eine Lösung enthalten:


    Mit den Zeilen hab es sogar ich mit Schrift- und Hintergrundfarbe hinbekommen :party::klatschen:


    AutoIt
    Global $ButClose = GUICtrlCreateButton(@lf & "Programm abbrechen " & @lf & "und Fenster schließen", 170, 35, 175, 70)
    GUICtrlSetStyle($ButClose, BitOR($WS_TABSTOP, $BS_NOTIFY, $BS_OWNERDRAW, $BS_MULTILINE)) ; Set the ownerdrawn flag
    ;Global $ButClose = GUICtrlCreateButton(" Programm abbrechen und Fenster schließen ", 170, 35, 160, 60, $BS_MULTILINE )
    GUICtrlSetFont(-1, 11, 700, 0, 'Arial')
    GUICtrlSetColor(-1, $COLOR_RED)
    GUICtrlSetBkColor(-1, $COLOR_Yellow)

    Der Text wird jetzt zwar nicht automatisch zentriert und es ist ein wenig "gefummel" - für mich jedenfalls. Aber es geht.

    Ob ich es so lasse oder die Buttons generell lieber einzeilig lasse, weis ich noch nicht - ich wollte es ja auch einfach nur "wissen". :S:D


    Evtl. geht es ja auch noch eleganter ...


    Grüße Sven

  • Denkst du, warum ich den Link und nicht nur ein Zitat gepostet habe?;)

    Die meisten erwarten nur, das man Lösungen postet und nicht selbst daran rumfrickeln muss.

  • So - ich denke so lasse ich das Skript erstmal - vielen Dank nochmal an Oscar.

    Hier jetzt der Code - gegen Verbesserungsvorschläge habe ich natürlich nix 8o


    Grüße

  • Ja ich hätte da einen Verbesserungsvorschlag :)


    Lagere die Abschaltzeit in eine INI aus -> Das ist einfach flexibler



    Gruß

    Peter




    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

  • Öhm - wenn ich wüsste wie ... wie oben erwähnt bin ich absolut "unerfahren".


    Ziel ist es, die EXE dann über die Aufgabenplanung zu einem Zeitpunkt zu starten. Bisher hatte ich den normalen windows-Shutdownbefehl genutzt - so ist es "hübscher" - und man kann auch anhalten, wenn die Arbeit in 5min noch nicht fertig ist ;)

  • @webseven


    Dafür dass Du unerfahren bist hast Du Dich ordentlich geschlagen. :thumbup:


    Lies mal in der Hilfe befehle wie z.B. iniread.

    dann schaust Du noch Pfadbefehle wie @ScriptDir an - das wars schon.


    1) Du schaust an wie eine Ini aufgebaut ist.

    2) Schreibst den Wert für die Zeit entsprechend in die INI

    3) Du liest bei Deinem Programmstart die Ini Werte in Variablen ein - fertig.

    4) Damit Dein Programm die INI immer findet liegt die INI im gleichen Ordner wie die exe. Den Pfad dazu liefert @ScriptDir

    Schon ist das fertig :)

    Ach ja - übe mit den INI Befehlen in einem Testprogramm - dann siehst Du wie das geht - erst wenn das im Testprogramm läuft in den fertigen Code einbauen.


    Da kann man natürlich noch mehr spielen.... in der INI könnte man auch festlegen ob shutdown oder restart :)


    Viel Spass beim Tüfteln...



    Gruß


    Peter


    PS.: Fragen? Ausprobieren und Probleme hier nachfragen...

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

  • Apropos herumspielen und Tüfteln, wenn du ein Spielkind bist, hätte ich einen Vorschlag für

    dich wie du den Mehrzeiligen Button samt Färbänderungen trotzdem noch so hinkriegst wie du es

    ursprünglich wolltest.

    Spiele einfach ein bisschen mit meinem Script herum und probiere es aus.

    Und wenn du unbedingt einen Button brauchst der aussieht wie ein Button, greifst zu deinem

    Lieblingsgrafikprogramm und bastelst dir ein Rechteck mit abgerundeten ecken und einem

    Farbverlauf und das ding sieht wie ein Button aus.

    Dann musst du allerdings eine Grafik mit dem Label kombinieren, aber damit wird es fast perfekt.

    Ich hatte mal so ein Beispiel finde es aber im Moment nicht mehr.