Gesamtzeit richtig berechnen

  • Hallo liebe Community,

    ich arbeite an einem größeren Projekt in dem ich unter anderem die Aktuelle Spielzeit und die Gesamtspielzeit berechnen will. Ich habe das nun in einem kleinen Test-Projekt aufgebaut. Leider funktioniert die Berechnung der Gesamtspielzeit während das Spiel (in dem Fall das Programm Notepad) läuft nicht, und ich komme einfach nicht weiter. Evtl kann mir hier ja jemand helfen.

    Vielen lieben Dank

    Gruß OhnePlan

  • Hi OhnePlan ,

    ich habe das Skript noch nicht ganz reviewed, keine Zeit, doch zwei kleine Auffälligkeiten bekommt man (Warnungen geworfen), wenn du folgende Direktiven verwendest (ggf. hilft es etwas). Ist nicht die Begründung zu deiner Fragestellung, aber eine Randnotiz.

    AutoIt
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
    Code
    (61,48) : warning: $elapsedTime possibly not declared/created yet
    $elapsedTime = _GetElapsedTime($iStartTime)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    Code
    (104,98) : warning: $_sPlayTimeColor: declared, but not used in func.
    Func _StopGame(ByRef $_iStartTime, ByRef $_hSpielHandle, ByRef $_iTotalPlaytime, $_sPlayTimeColor)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    Viele Grüße
    Sven

  • Mal eine Frage. Wenn Du ein Spiel spielst, dann startet doch ein Prozess. Wieso fragest Du nicht ab ob der Prozess läuft oder nicht? Wenn er läuft spielst Du, schreibst die aktuelle Zeit in z. B. eine Ini-Datei und wenn der Prozess nicht läuft schreibst Du es wieder in die Ini. Die zweite ZTeit minus die erste Zeit ist die Zeit die Du gespielst hast. DIese speicherst Du dann wieder. Wenn Du dann z. B. einen Tag später wieder spielst, machst Du das ganze wieder von vorne. Nur das Du die gesamte Spielzeit vom VOrtag zu dre vom aktuellen Tag zusammenrechnen musst. So würde ich sinngemäß vorgehen. Aber es kann auch sein das es so nicht möglich ist, aber es soll für Dich eine Anregung sein, es vielleicht mleichter lösen zu können.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo SOLVE-SMART ,

    danke für das kleine Feedback, ist "gefixt". $_sPlayTimeColor war noch ein Überbleibsel vom großen Projekt.


    Hallo Alina ,

    das ist nicht das Problem, so ähnlich funktioniert auch alles. Ich will nur die Gesamtspielzeit errechnen, während ich Spiele. Die Gesamtspielzeit wenn das Spiel geschlossen wird funktioniert.

  • Gesamtspielzeit von aktueller Spielesitzung oder Gesamtspielzeit seit Du jemals das Spiel gestartet hast?
    Blau oder grün ? :rofl:
    Beides geht doch ideal über das was ich oben vorgeschlagen habe.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Gesamtspielzeit von aktueller Spielesitzung

    Habe ich. Es geht um die Gesamtspielzeit seit ich jemals das Spiel gestartet habe. Führe dazu doch einfach mal mein Script aus. Wenn du weißt, wie es funktioniert, dann bitte erleuchte mich ^^. Ich bekomm es nicht hin.

  • Aber die Berechnung ist doch Prinzipiell die Gleiche, nur das du andere Start- und End-Werte hast.

    Also was funktioniert dabei nicht (genaue Beschreibung)?

    Tipp: Baue eine Funktion die diese Berechnung macht und nutze sie für beide á la: $diff = _calculateDiff($StartTime, $Endtime) die dir dann immer einfach den Wert zurück gibt.

    Wenn das dann bei einem von beidem nicht passt, weißt du das entweder die Startzeit oder die Endzeit nicht passt.
    Btw.: Hast du diese mal geprüft ob diese stimmen?

  • OhnePlan

    Script habe ich gerade leidr keine Zeit. Vielleicht heute Abend, muss ich mal sehen.

    Sehe Dir mal in der Hilfe ProcessExists und alles was Bezug auf Process hat an.
    Da kannst Du auf den Prozess, also Dein Spiel reagieren.

    edit:
    Gerade über die Suchfunktion gefunden: Laufzeit berechnen
    Gib das mal als Suche ein. Da wirst Du fündig, gleich auf Seite 1.

    Link geht schneller : Programmlaufzeit von AspirinJunkie

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    3 Mal editiert, zuletzt von Alina (16. Februar 2024 um 14:58) aus folgendem Grund: Nach SuFu Hilfestellung gefunden

  • Gesamtspielzeit von aktueller Spielesitzung

    Habe ich. Es geht um die Gesamtspielzeit seit ich jemals das Spiel gestartet habe. Führe dazu doch einfach mal mein Script aus. Wenn du weißt, wie es funktioniert, dann bitte erleuchte mich ^^. Ich bekomm es nicht hin.

    Auch wenn man es leicht ändern kann und in deinem Fall überschaubar ist: ich für meinen Teil werde niemals fremden Code ausführen der (weder lesend noch schreibend) auf die Registry zugreift.

  • Moombas da gebe ich Dir recht !!!

    Vielleicht hilft Dir das auch weiter:

    Müsste aber noch überarbeitet werden.
    Unter anderem hier: escndv.exe <--- tauschen durch Deine Startdatei vom Spiel:
    Und die Ausgabe der MsgBox muss auch nicht sein, das ist nur als Beispiel.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    Einmal editiert, zuletzt von SOLVE-SMART (16. Februar 2024 um 15:29)

  • Alina vielen Dank für deine Hilfe, das bringt mich leider nicht weiter.

    Die aktuelle Spielzeit habe ich ermittelt, auch wenn ich das Spiel schließe wird die Spielzeit auf die Gesamtspielzeit addiert und beim Neustart des Autoit-Programmes korrekt eingelesen und angezeigt.
    Was allerdings nicht funktioniert: Während ich spiele, möchte ich die Gesamtspielzeit ermittelt. Sprich die gespeicherte Gesamtspielzeit + Aktuelle Spielzeit und das eben immer wenn ich auf den Gesamtspielzeit-Button klicke. Außerdem muss dann, bei beenden des Spieles (und die _StopGame Funktion greift) die Gesamtspielzeit richtig berechnet und gespeichert werden. Ich wäre sehr dankbar, wenn jemand das Script ausführt um evtl. das Problem besser zu verstehen. Ich komme hier leider nicht weiter. Notfalls passe ich es auch an, sodass nicht in die Registry sondern in eine TXT oder INI Datei geschrieben wird.

    Vielen Dank,

    Gruß OhnePlan

    Einmal editiert, zuletzt von OhnePlan (16. Februar 2024 um 18:17)

  • wenn du mit Registry Einträgen arbeitest, dann speichere doch einfach den letzten Start des Spiels auch in dem Zweig.

    Dann kannst du immer gegen die aktuelle Uhrzeit prüfen bei Spielzeit-Abfrage oder Abfrage Gesamtspielzeit.

    setze bei Spielstart ein: RegWrite($regKey, "StartPlayTime", $REG_STR_TYP, _NowCalc())

    und prüfe im Spiel oder für gesamt gegen den jeweiligen Wert in der Registry mit _DateDiff()

    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 ausführbares Script ("as is"), 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. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

    Einmal editiert, zuletzt von Schnuffel (16. Februar 2024 um 18:32)

  • Alina hat dir doch ein brauchbares Beispiel geliefert.

    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 ausführbares Script ("as is"), 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. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Moin, auch wenn ich die auf Spiele ausgerichteten Skripte nicht gern unterstütze: Ich kann Dein Problem nicht finden.

    Du verwaltest eine "bisherige Gesamtspielzeit" in der Registrierung. Die kannst Du beim Start des Skripts einlesen. Sie kann sich nicht verändern.

    Das Skript startet das Spiel. Du musst Dir also nur einmal den Startzeitpunkt merken.

    Wenn Du auf "Aktuelle Spielzeit" drückst, musst Du die Differenz zur Startzeit berechnen. Wie Du sagst, klappt das bereits.

    Wenn Du auf "Aktuelle Gesamtzeit" drückst, musst Du die "Aktuelle Spielzeit" berechnen und den beim Start des Skripts eingelesenen Wert aus der Registrierung addieren.

    Wenn das Spiel (btw. das Skript?) beendet wird, musst Du die "Aktuelle Spielzeit" berechnen, den beim Start des Skripts eingelesenen Wert aus der Registrierung addieren und das Ergebnis in die Registrierung zurückschreiben.

    Wo klemmt es?