Programm läuft-Anzeige

  • Servus

    Ich hätt' mal wieder eine Frage an Euch:

    Ein Programm, das Ordner/die Eig.Dateien/den ganzen Rechner nach Dateien durchsucht oder viiiele Dateien von A nach B kopiert oder ähnliches, das läuft schon mal eine gewisse Zeit - und zwar im "Hintergrund", also ohne dass am Bildschirm was zu sehen wäre.

    Um aber zu sehen, dass das Prog. noch läuft (könnte ja hängenbleiben) könnte man vielleicht an geeigneten Stellen eine Msg. ausgeben. Das erhöht aber erst recht wieder die Laufzeit.

    Habt Ihr eine Idee, wie man ganz einfach anzeigen könnte, dass das Programm noch läuft?

    Ein beep() wäre zwar sowas, aber was visuelles würde mit besser gefallen.

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Eine normale Msgbox wäre blockierend. Heißt: Das Skript würde während dieser Anzeige nicht weitersuchen.

    Es gibt durchaus nichtblockierende Varianten aber die müsste man dann halt auch einzeln wegklicken.

    Vielleicht wäre SplashTextOn() eher etwas für dich (Beispiel in der Hilfe hierzu ansehen wie man den Text aktualisieren kann).

    Dort könnte man z.B. den jeweils aktuellen Ordner ausgeben.

  • Hast Du die Kopierroutine gescriptet? Vielleicht magst Du das Script dann mal zeigen, damit man sehen kann, wo man was einarbeiten kann.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi!

    Eine Fortschrittsanzeige mit fortlaufender Anzeige der %-Zahl der bereits erledigten Aktion macht Sinn. Bei einfachen/schnellen ( <1 Minute) dauernden Aktionen kann man auch einen drehenden "Balken" verwenden, oder beides kombinieren.

    Wenn du das Anzeigefenster so weit verkleinerst, dass die Anzeige nur auf die Titelleiste beschränkst, kannst du das "Minifenster" als TopMost deklarieren und an eine Stellle des Bildschirms ziehen, an der es nicht stört.

    Oder alle x Sekunden im Traymenü sichtbar machen...oder den berühmten "Ladebalken"...oder oder oder

    Der "Beep"-Sound, bzw. gibt es genau dafür die definierten Windows-Sounds, macht am Ende einer Aktion Sinn wenn das Anzeigefenster aktuell nicht sichtbar ist.

  • Wenn Du z. B. 10 GB Daten von Ordner-A nach Ordner-B kopieren möchtest, muss ja der Ordner-B um 10 GB größer sein als (wie?) vorher. Das könnte man abfragen. Also die Ordnergröße abfragen. Bleibt die Ordnergröße gleich und ist nicht um 10 GB angestiegen, hat sich das Programm festgesetzt.

    Wäre Dir damit geholfen?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Wenn du das Anzeigefenster so weit verkleinerst, dass die Anzeige nur auf die Titelleiste beschränkst, kannst du das "Minifenster" als TopMost deklarieren und an eine Stellle des Bildschirms ziehen, an der es nicht stört.

    Das war auch mein erster Gedanke bei der Anfrage aber ggf. brauchen wir nun erst mal Feedback vom TE

    Und OT: Alina : man nutzt entweder als oder wie, niemals beides zusammen (nur um dein "(wie?)" zu beantworten) ;)

  • Schau Dir mal ToolTip in der Hilfe an. Das ist einfach. Du kannst Dir z.B. anzeigen lassen, was gerade gemacht wird (kopiere Datei $xy).

    So siehst Du durch die Veränderung der Anzeige, dass das Programm noch läuft.

  • Danke für die vielen Vorschläge.

    Die Fortschrittsanzeige würde zwar beim kopieren bekannter Datenmengen Sinn machen (wird möglicherweise eine Art Mini-Backupprogramm).

    Aber wenn man beispielsweise einen Rechner nach Bildern durchsucht, ist die Anzahl bzw. Datenmenge nicht bekannt.

    Dafür ist SplashTextOn oder ToolTip schon sehr brauchbar - z.B.:

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Hi zusammen,

    eigentlich wurden bereits alle mir bekannten Möglichkeiten, welche für den beschriebenen Anwendungsfall relevant sind, aufgelistet/vorgeschlagen 👍 .
    Vielleicht dennoch eine weitere: Logging => Falls du die Aktionen (copy etc.) selbst verwaltest, dann baue doch Log-Statements ein (Log-Einträge die du in eine Log-Datei schreibst). Dann kannst du bei Bedarf reinschauen und musst dich nicht visuell durch Progress-Anzeigen (ToolTip, ProgressBar etc.) ablenken lassen. Du siehst also "bei Bedarf" ob der Prozess irgendwo hängt oder wie weit er ist (abhängig davon wie viel und was du loggst).

    💡 Kleiner Hinweis zu dieser Variante: Die eigentlich Verarbeitungszeit vergrößert sich damit auch etwas, da natürlich der Schreibvorgang in die Datei ein wenig Zeit in Anspruch nimmt. Allerdings für solche unkritischen Anforderungen kein Problem meiner Meinung nach.

    Viele Grüße
    Sven

  • Danke Euch - wären weitere Möglichkeiten.

    Hab jetzt noch ein bißl rumg'spielt und ToolTip mit Titel "Programm läuft" und der obigen Message (abwechselnd / und \) passt gut - einfach und kann auch "gelesen" werden, wenn man nicht so "Computeraffin" ist (nicht mein Rechner und es könnte ja sein, dass das Programm dann Stunden läuft ;) ).

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Ich gebe zu Bedenken, dass eine Aktualisierung bei jedem Schleifendurchlauf u.U. dazu führt, dass der Prozessor mehr mit dem aktualisieren beschäftigt ist, als die eigentliche Aufgabe auszuführen.

    Deshalb wäre eine Aktualisierung nur alle xxx Millisekunden viel zielführender. Sowas lässt sich sehr leicht mit einem Timer realisieren.

  • Ich würde es nicht mal an die Zeit knüpfen, sondern die Daten (also deine Message) innerhalb der ausführenden Funktionen aktualisieren.

    Dann richtet sich die Information etc. daran, wie die einzelnen Operationen ablaufen. ABER:

    Man sollte jedoch dann im einzelnen sich anschauen ob es dabei Sinnvoll ist, jeden einzelnen Step z.B. beim kopieren in der GUI neu anzuzeigen oder nur den jeweiligen Step/Funktion mit Start-Zeitstempel. Das wären aber Sachen, die der TE nur beurteilen kann entsel und du könntest das dann dynamisch in die vorhandenen Funktionen einbauen.

    Zudem könntest du auch Fehler/Probleme innerhalb deiner Funktion mit visualisieren. Siehe unten nur als grobes q&d Beispiel:

  • Danke für die weiteren Tipps.

    Ich hab mir das jetzt so gedacht:

    Spoiler anzeigen

    Die Funktion Tuwas() steht für die eigentliche(n) Aufgaben eines Programms (Dateien suchen, umbennen, kopieren, löschen, und ähnliches).
    Entspricht dann wohl eher Sleep (5000) als (500)

    Ich nehme an, dass die abwechselnde Ausgabe von "/" und "\" (nach jedem Durchlauf) schneller sein wird als etwa eine MsgBox mit einer Zeitbegrenzung von 0.3 Sekunden

    (kürzer wird anscheinend auf 0 (Standard) abgerundet).

    Code
    MsgBox(0,"Laftno",$SirgendeinErgebnis,0.3)

    Danke allen für die Hilfe

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

    2 Mal editiert, zuletzt von entsel (29. März 2023 um 11:43)

  • einfaches Beispiel:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Moin,

    mit einem Progressbar-Control mit $PBS_MARQUEE Stil kann man eine Animation anzeigen, ohne dass sich das Skript darum kümmern muss. Mir gefällt das:

    Die Funktion ist allerding sehr schlicht gehalten. Man muss z.B. darauf achten, dass der Text in die konstant vorgegebene Breite passt.