Zeitstempel setzten beim Öffen & schliessen eines Programmes

  • Hallo Liebe Autoit Community

    Ich stehe leider mal wieder vor einem Problem.
    Ich möchte je einen Zeitstempel schreiben wenn ein Programm (bei meinem Test notepad.exe) geöffnet / geschlossen wurde.
    Ich denke man sieht was ich machen möchte die Variablen $aTime (Startzeit), $eTime (Endzeit) sollten per korrektem Script gefüllt werden.
    Folgendes sind meine kläglichen Versuche:

    Ich bedanke mich bereits im Voraus für eure wertvolle Hilfe!
    Mfg Ru642

  • Deine $activeProcess = 1 Abfrage ist außerhalb der While-Schleife und wird niemals aufgerufen werden.
    Du musst viel mehr prüfen ob dein Prozess läuft und ob du ihn bereits als laufend in $activeProcess gespeichert hast.
    Wenn nicht, dann setzt du $activeProcess = 1 und speicherst die Zeit und sollte der Prozess nicht existieren aber $activeProcess = 1 sein, so wurde er terminiert und du kannst die Zeit wieder speichern, solltest aber noch $activeProcess auf 0 setzen und dann beginnt das ganze Spiel von vorne.

  • Hallo Alpines danke für deine Antwort.

    Ich habe nun die Abfrage in die Schleife mit aufgenommen aber nun wird natürlich die Zeit immer wieder ausgegeben.
    Wie kann ich das einmalig ausgeben ?

    Hier mein angepasster Script:

    Einmal editiert, zuletzt von ru642 (16. August 2017 um 11:44)

  • Wie kann ich das einmalig ausgeben ?

    Ich hab dir die Logik doch im vorgegangenen Post beschrieben. Du musst irgendwie abspeichern ob dein Prozess schon läuft und die Zeit nur ersetzen wenn der Prozess läuft und er laut deiner Variable noch nicht gestartet ist. Sollte der Prozess bereits laufen und du hast das in der Variable abgespeichert, dann schreibst du natürlich nicht nochmal die Zeit rein.
    Wenn der Prozess nicht läuft und deine Variable beinhaltet, dass der Prozess läuft, dann speicherst du wieder die Uhrzeit und setzt die Variable 0.

  • Ich vermute mal, du willst nicht unbedingt Programme, sondern eher Fenster protokollieren. Dabei würd sich das hier anbieten:

    Es wird auf die Windowsevents zum erstellen und zerstören eines Fensters gelauscht und gegebenenfalls das Event behandelt.
    In der auskommentierten If bedingung kannst du auch prozesse zum filtern angeben, damit nur diese protokolliert werden :)

    Du kannst auch ggf. das Event $HSHELL_WINDOWACTIVATED noch zusätzlich abfragen, dann würde jedes aktivieren eines anderen Fensters mitprotokolliert werden. Dann kannst du auch messen, wie lange ein Fenster genutzt wird,... aber das kommt ja auch drauf an, wofür die Zeitstempel sind ;)

    Ich hoffe, das hilft dir weiter.

    MfG Kanashius

  • Hallo Kanashius
    Danke für deinen Script, leider komme ich mit diesem leider überhaupt nicht mehr draus. :S
    Ich habe den Script mal ausgeführt und dieser loggt brav alle fenster die ich öffne & schliesse.
    In meinem Fall brauche ich nicht viel, nur 1 Programm soll geloggt werden.
    Es geht darum dem Kunden die Nutzungsdauer des Programms zu verrechnen.
    Desshalb muss diese irgendwie festgehalten werden.

    Ich habe deinen auskommentierten Teil erneut in den Script eingepflegt und getestet erhalte aber eine Fehlermeldung.
    Ich gehe mal davon aus das ein then zu viel ist ?

    AutoIt
    If true Then _ArraySearch($arFilter,$pname)<>-1 Then
    If true Then _ArraySearch($arFilter,$pname)^ ERROR

    Hier noch mein Versuch den ich vor deiner Nachricht erstellt hatte:


    MFG Ru642

    • Offizieller Beitrag

    Es geht darum dem Kunden die Nutzungsdauer des Programms zu verrechnen.

    In dem Fall würde ich das anders angehen:

  • Hallo Oscar

    deine Version gefällt mir sehr gut, wollte mich erst später dann mit dem Filewrite beschäftigen, wäre aber so oder so auf dieses zurückgekommen.

    Leider habe ich noch ein schwerwiegendes Problem und zwar wird kein ini File erstellt.;(
    Der Tooltip zeigt aber an das hochgezählt wird.

    Edit: habe ich bereits selber hingekriegt ^^

    Einmal editiert, zuletzt von ru642 (17. August 2017 um 11:02)

  • Hallo Oscar

    ich habe nun bei der Func AddTime () den IniWrite($sIniFile, 'Protocol', 'Time', $iProcTime) auch noch hinzugefügt.
    Nun wird ein ini-File erstellt und in dieses die Zeit hinzugefügt.
    Nun habe ich festgestellt das im File keine Formatierung hh/mm/ss besteht.
    Wie setzt man dies am besten um ?

    Edit: Habe mir hier einfach die bereits bestehende Funktion _FormatTime zu nutze gemacht. :)

    2 Mal editiert, zuletzt von ru642 (17. August 2017 um 11:02)

  • Hallo Oscar
    ich habe nun deinen Script etwas erweitert.
    Da ich noch nie mit Filewrite beschäftigt habe besteht noch eine Frage.
    Wie genau kann ich verhindern das Einträge überschrieben werden.
    Beispiel aktuell sieht das File folgendermassen aus:
    [Protocol]
    Time=17.08.2017/scr:00:00:22

    Ich möchte nun aber verhidnern das die Zeit von Benutzer scr am nächsten Tag überschrieben wird + es kann auch ein anderer Benutzer den Script ausführen dann würde die ja auch wieder alles überschreiben.

    Etwas in die Richtung und ich wäre glücklich bis zum Mond und zurück:

    [Protocol]
    Time=16.08.2017/mat:00:05:11
    Time=17.08.2017/scr:00:00:22
    Time=17.08.2017/mab:01:00:05
    Time=18.08.2017/scr:00:10:22
    usw.

    Trotzdem schon vielen, vielen Dank für die unglaublich grosse Hilfe!

    Aktueller Script:


    Mfg Ru642

  • ru642: Inidateien können nur einmal den selben Schlüssel (Time) in einer Sektion (Protocol) haben. Du könntest statt IniWrite, FileWrite nehmen, was ich aber unsinnig finde, da ini (Initialisierungs) Dateien dafür da sind, nur einmal einen Schlüssel in einer Sektion zu besitzen.

    Lg NO1

  • Kann ich das Irgendwie austriksen in dem ich z.B. Time durch das Datum ersetzte und pro Benutzer ein File erstellen lasse ?

  • Hallo Oscar
    ich will die Nutzungsdauer wissen.
    Am besten pro Tag darum auch das Datum.
    So kann ich am besten rausfiltern wieviel eine Applikation über den Zeitraum von einer Woche oder Monat benutzt wurde.

    • Offizieller Beitrag

    Dann erstelle für jeden User eine Log-Datei: