Sie beginnen jeden Tag früh mit der Arbeit, damit Sie alles im Laufe des Tages lösen können. Dann schauen Sie auf die Uhr und es ist 3 Uhr morgens, aber Ihre Arbeit ist immer noch nicht erledigt. Wo ist also die Zeit geblieben?
Sie können eine spezielle Zeiterfassungs-App verwenden, diese kann jedoch kompliziert und frustrierend sein. Warum erstellen Sie stattdessen nicht Ihre eigene einfache kleine App? Diese Anwendung kann alle Fenster verfolgen, die Sie tagsüber genutzt haben. Sie benötigen lediglich AutoHotKey, ein einfaches Textverarbeitungsprogramm wie Notepad und etwa eine halbe Stunde. Lass uns anfangen!
Erstellen Sie mit AutoHotKey Ihr eigenes Windows-Protokollierungsskript
Bevor Sie beginnen, sollten Sie AHK auf Ihrem Computer installieren, da es als „Parser“ für das Skript fungiert. Es ist das Tool, mit dem Ihr Skript „ausgeführt“ werden kann.
Hinweis : Sie können das Skript auch nach der Fertigstellung kompilieren, um es in ein echtes ausführbares Programm umzuwandeln. Dies würde jedoch den Rahmen dieses Artikels sprengen.
Laden Sie AutoHotKey von der offiziellen Website herunter und installieren Sie es.
Wählen Sie Neu > AutoHotKey-Skript
Starten Sie Ihren bevorzugten Dateimanager und greifen Sie auf den Ordner zu, in dem Sie das Skript speichern möchten. Klicken Sie dann mit der rechten Maustaste auf eine leere Stelle und wählen Sie Neu > AutoHotKey-Skript .
Sobald es fertig ist, ist es Zeit, das eigentliche Skript zu schreiben.
1. Identifizieren Sie die erforderlichen Variablen
Öffnen Sie das Skript in Ihrem bevorzugten Editor. Sie können etwas Einfaches wie Notepad verwenden, das mit Windows geliefert wird. In diesem Artikel wird jedoch Notepad++ für dieses Tutorial verwendet. Notepad++ ist kostenlos und für diesen Zweck besser geeignet, Sie sollten es also ausprobieren.
Beachten Sie, dass Sie keine Anwendungen wie Word oder Google Docs verwenden sollten, da diese die Formatierung des Skripts beeinträchtigen könnten. Verwenden Sie einen Text- oder Code-Editor.
Das Skript enthält einige grundlegende empfohlene Informationen zu Kompatibilität und Leistung. Lassen Sie sie so wie sie sind und starten Sie das folgende Skript.
Beginnt mit:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Weisen Sie zunächst AppLoggingRate den Wert „10“ zu , der zur Berechnung der Zeit zwischen Fensterprotokollierungsversuchen verwendet wird.
Bei Verwendung mit der Sleep-Funktion von AHK entspricht 1000 ungefähr einer Sekunde. Wenn Sie es also mit AppLogingRate multiplizieren , wird die SleepTime-Variable „gleich 10 Sekunden“ sein.
LogPath ist der Pfad, der zum Speichern von Protokollen verwendet wird. Im Beispiel wird der Wert %A_ScriptDir% verwendet , der übersetzt „das Verzeichnis, von dem aus Sie das Skript ausführen“ bedeutet. Wenn Sie möchten, können Sie den vollständigen Pfad zu einem anderen Ordner verwenden.
Setzen Sie schließlich LastActiveWindow auf leer und verwenden Sie es später, um zu überprüfen, ob sich das aktive Fenster geändert hat.
2. Überwachen Sie aktive Fenster
Da wir ständig überwachen wollen, welches Fenster aktiv ist und wenn es sich ändert, den Titel und die Uhrzeit aufzeichnen möchten, müssen wir eine „Schleife“ verwenden.
Wie der Name schon sagt, läuft eine Schleife kontinuierlich und wiederholt dieselbe(n) Funktion(en). Dank der einfachen Syntax von AHK ist der folgende „Code“ relativ einfach zu verstehen:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Definieren Sie eine Schleife, indem Sie einfach das Wort „loop“ eingeben und dann den Anfang mit „{“ und das Ende mit „}“ markieren. Alles in den Zeilen zwischen „{“ und „}“ wird ewig ausgeführt, bis Sie das Skript beenden.
Starten Sie die Schleife, indem Sie eine Zeitspanne warten ( Sleep ), die der SleepTime-Variablen entspricht. Diese Variable vereinfacht die Zeitsteuerung. Anstatt das Skript selbst zu bearbeiten, können Sie ihm über diese Variable „angeben“, wie viele Sekunden jede Schleife dauern soll.
Verwenden Sie abschließend die Message Box , um das Skript zu testen. Versuchen Sie, es zu speichern und auszuführen (doppelklicken Sie auf die Skriptdatei). Sie sehen ein Meldungsfeld mit der Meldung „Es funktioniert!“ (Skript funktioniert) nach 10 Sekunden.
Klicken Sie mit der rechten Maustaste auf das AHK-Symbol in der Windows-Taskleiste und beenden Sie das Skript, wenn genügend Meldungsfelder vorhanden sind. Gehen Sie dann zurück zum Editor und ersetzen Sie die MsgBox- Zeile durch:
WinGetActiveTitle, ActiveWindow
Dies ist der Befehl, um den Titel des aktiven Fensters abzurufen. Lassen Sie die zusätzliche Zeile „StoreActiveWindow“ weg , die im Beispiel beim Erstellen von Skripts zum Testen verwendet wurde.
Rufen Sie den Titel des aktiven Fensters ab und speichern Sie ihn in einer Variablen
3. Rufen Sie die aktuelle Uhrzeit und den Namen ab
Jetzt kommt der Kern der Skriptlogik. Vergleichen Sie den Namen des aktiven Fensters mit dem vorherigen, und wenn sie unterschiedlich sind, „tun Sie etwas“. So einfach ist alles:
If ActiveWindow != %LastActiveWindow%
{
}
Überprüfen Sie anhand des oben Gesagten, ob das aktuelle ActiveWindow sich ( != ) von dem in der LastActiveWindow- Variablen gespeicherten Wert unterscheidet (die ursprünglich auf leer gesetzt war). Wenn ja, führt AHK den Code zwischen { und } aus , der derzeit leer ist.
Legen Sie die Funktion fest, um den Titel des aktiven Fensters und des vorherigen Fensters zu vergleichen
Um die Betriebszeit eines Fensters zu messen, ist es notwendig, sowohl Datum als auch Uhrzeit zu verfolgen. Für jeden Tag werden unterschiedliche Protokolle mit dem Datum im Namen gespeichert. Nicht nur jede Änderung, sondern auch der Zeitpunkt ihres Auftretens wird aufgezeichnet. Weisen Sie dazu den Variablen LogTime und LogFilename unterschiedliche Zeitformate zu , mit:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Fügen Sie diese Zeilen zwischen den geschweiften Klammern in „If ActiveWindow...“ hinzu , damit AHK sie ausführt, wenn es eine Fensteränderung erkennt.
Rufen Sie die aktuelle Uhrzeit ab und weisen Sie sie in zwei Variablen unterschiedlichen Formats zu
4. Datenformat
Wir erfassen nun die Zeit in zwei unterschiedlich formatierten Variablen, sowie den Titel des aktiven Fensters. Allerdings gibt es ein kleines Problem: Der Titel des Fensters kann auch unerwünschte Zeichen enthalten. Mithilfe der AHK-Unterstützung für RegEx ist es möglich, alle nicht alphanumerischen Zeichen zu entfernen, mit:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Vor diesem Hintergrund „bitten“ wir AHK, alle Zeichen aus der ActiveWindow-Variablen zu entfernen, die nicht mit den Klammern übereinstimmen:
- Kleinbuchstaben
- Großbuchstabe
- Zahlen
Weisen Sie dann das Ergebnis der LogWindow-Variablen zu.
Bereinigen Sie den Titel des aktiven Fensters mit RegEx
Nachdem alle Variablen festgelegt und alle wertvollen Daten erfasst wurden, können Sie nun die Protokolldatei und ihren Inhalt formatieren.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Zuvor haben wir der Variablen LogFilename das aktuelle Datum zugewiesen. Fügen Sie daher für die erste Zeile „_AppLog.md“ zum Datum hinzu, um es als Dateinamen zu verwenden.
Legen Sie den Namen der Protokolldatei fest
Kombinieren Sie in der zweiten Zeile die Variable LogPath , die zu Beginn als Ziel für die Protokolldatei definiert wurde, zusammen mit dem Dateinamen. Ihre Kombination ist der vollständige Pfadname der Protokolldatei, der der Variablen LogFile zugewiesen wird.
Weisen wir der Variablen FileContent den entsprechenden Wert von „Leere Zeile, Zeit – Name des Fensters, zwei weitere Leerzeilen, ein Trennzeichen und eine weitere Leerzeile zur Sicherheit“ zu .
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- Der Buchstabe „n“ weist AHK an, eine neue Zeile einzugeben (entspricht dem einmaligen Drücken der Eingabetaste ).
- Bei der Anzeige in einem Cross-Down-kompatiblen Viewer werden drei Striche als Trennzeichen angezeigt.
- „% LogTime%“ und „% LogWindow%“ sind Variablen, die den Namen des aktiven Fensters und den Zeitpunkt seiner Erkennung speichern.
Bestimmt den Inhalt der Protokolldatei
5. Dateien aktualisieren
Sie haben definiert, was wir in die Datei schreiben möchten, sowie ihren Pfad und Dateinamen. Übrig bleibt nur der eigentliche, einfache Text wie folgt:
FileAppend, %FileContent%, %LogFile%
Hängen Sie alles in der Variable „FileContent“ an die Datei „LogFile“ an.
Verwenden Sie die Append-Funktion von AHK, um die Protokolldatei zu aktualisieren oder eine völlig neue zu erstellen
Die Funktion „Anhängen“ fügt der Datei „FileContent“ hinzu, sofern diese vorhanden ist, erstellt sie jedoch auch von Grund auf, wenn die Datei nicht vorhanden ist.
Es gibt noch eine letzte Optimierung: Ersetzen Sie den Inhalt der LastActiveWindow- Variablen durch das aktuell aktive Fenster.
Fügt den Titel des aktuell aktiven Fensters für zukünftige Tests in die Variable LastActiveWindow ein
Dazu sollte das Skript in der Lage sein, den nächsten Fensterwechsel zu erkennen.
LastActiveWindow = %ActiveWindow%
Und mit dieser letzten Ergänzung ist der Windows-Logger fertig! Speichern Sie das Skript und führen Sie es aus. Überprüfen Sie dann die Markdown-Datei. Diese Datei wird nach 10 Sekunden im Skriptdateiordner angezeigt.
Die Windows-Protokolldatei wird im selben Verzeichnis wie das Skript erstellt
Übernehmen Sie die Kontrolle über Ihre eigene Zeit
Sie können die Protokolldatei mit einem beliebigen Texteditor öffnen. Allerdings sieht es besser aus, wenn Sie es in einem Markdown-kompatiblen Editor öffnen. Im Screenshot sehen Sie das Protokoll im beliebten Typora-Editor.
Die vom Skript generierte Markdown-Datei wird in Typora geladen
Auf diese Weise können Sie ganz einfach überprüfen, welche Apps Sie am häufigsten verwendet haben. Dazu benötigen Sie lediglich ein Tool wie Notepad.
Wenn Sie etwas „Besondereres“ wünschen, können Sie die Ausgabe des Loggers jederzeit „stilisieren“, um stattdessen eine CSV-Datei zu erstellen. Es ist so einfach wie das Anpassen der FileContent- Variable und der Erweiterung der erstellten Datei. Sie können solche Dateien dann in Anwendungen wie Excel, Google Calc oder sogar Zeiterfassungstools von Drittanbietern importieren.
Vollständiges Skript
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; Variables
; ---------
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
; Logic
; -----
Loop
{
Sleep %SleepTime%
WinGetActiveTitle, ActiveWindow
StoreActiveWindow = %ActiveWindow%
If ActiveWindow != %LastActiveWindow%
{
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename, , yyyy-MM-dd
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
sleep 50
FileAppend, %FileContent%, %LogFile%
LastActiveWindow = %ActiveWindow%
}
}
Exit