Ξεκινάς τη δουλειά σου κάθε μέρα νωρίς για να μπορείς να λύνεις τα πάντα μέσα στη μέρα. Στη συνέχεια, ελέγχετε το ρολόι και είναι 3 π.μ., αλλά η δουλειά σας δεν έχει ακόμα ολοκληρωθεί. Πού πήγε λοιπόν ο καιρός;
Μπορείτε να χρησιμοποιήσετε μια αποκλειστική εφαρμογή παρακολούθησης χρόνου, αλλά αυτά μπορεί να είναι περίπλοκα και απογοητευτικά. Αντίθετα, γιατί να μην δημιουργήσετε τη δική σας απλή μικρή εφαρμογή; Αυτή η εφαρμογή μπορεί να παρακολουθεί όλα τα παράθυρα που έχετε χρησιμοποιήσει κατά τη διάρκεια της ημέρας. Χρειάζεστε απλώς το AutoHotKey, έναν βασικό επεξεργαστή κειμένου όπως το Σημειωματάριο και περίπου μισή ώρα. Ας αρχίσουμε!
Δημιουργήστε το δικό σας σενάριο καταγραφής των Windows με το AutoHotKey
Πριν ξεκινήσετε, θα πρέπει να εγκαταστήσετε το AHK στον υπολογιστή σας γιατί θα λειτουργήσει ως "parser" για το σενάριο. Είναι το εργαλείο που θα επιτρέψει στο σενάριό σας να «τρέξει».
Σημείωση : Μπορείτε επίσης να μεταγλωττίσετε το σενάριο μετά την ολοκλήρωση για να το μετατρέψετε σε πραγματικό εκτελέσιμο πρόγραμμα. Ωστόσο, αυτό ξεφεύγει από το πεδίο εφαρμογής αυτού του άρθρου.
Κατεβάστε το AutoHotKey από τον επίσημο ιστότοπο και εγκαταστήστε το.

Επιλέξτε New > AutoHotKey Script
Ενεργοποιήστε τον αγαπημένο σας διαχειριστή αρχείων και αποκτήστε πρόσβαση στο φάκελο όπου θέλετε να αποθηκεύσετε το σενάριο. Στη συνέχεια, κάντε δεξί κλικ σε μια κενή τοποθεσία και επιλέξτε New > AutoHotKey Script .
Μόλις ολοκληρωθεί, ήρθε η ώρα να γράψετε το πραγματικό σενάριο.
1. Προσδιορίστε τις απαραίτητες μεταβλητές
Ανοίξτε το σενάριο στον αγαπημένο σας επεξεργαστή. Μπορείτε να χρησιμοποιήσετε κάτι απλό όπως το Σημειωματάριο που συνοδεύει τα Windows, αλλά το άρθρο θα χρησιμοποιήσει το Σημειωματάριο++ για αυτό το σεμινάριο. Το Notepad++ είναι δωρεάν και είναι καλύτερα προσαρμοσμένο για αυτόν τον σκοπό, επομένως θα πρέπει να το δοκιμάσετε.
Λάβετε υπόψη ότι δεν πρέπει να χρησιμοποιείτε εφαρμογές όπως το Word ή τα Έγγραφα Google, που μπορεί να επηρεάσουν τη μορφοποίηση του σεναρίου. Χρησιμοποιήστε ένα πρόγραμμα επεξεργασίας κειμένου ή κώδικα.
Το σενάριο θα περιέχει ορισμένες βασικές προτεινόμενες πληροφορίες σχετικά με τη συμβατότητα και την απόδοση. Αφήστε τα ως έχουν και ξεκινήστε το παρακάτω σενάριο.
Ξεκινάει με:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Ξεκινήστε εκχωρώντας την τιμή "10" στο AppLoggingRate , η οποία θα χρησιμοποιηθεί για τον υπολογισμό του χρόνου μεταξύ των προσπαθειών καταγραφής παραθύρου.
Όταν χρησιμοποιείται με τη λειτουργία Sleep του AHK, το 1000 είναι περίπου ίσο με ένα δευτερόλεπτο. Έτσι πολλαπλασιάζοντάς το με το AppLogingRate θα κάνετε τη μεταβλητή SleepTime «ίση με 10 δευτερόλεπτα».
Το LogPath είναι η διαδρομή που χρησιμοποιείται για την αποθήκευση αρχείων καταγραφής. Το παράδειγμα χρησιμοποιεί την τιμή %A_ScriptDir% , η οποία μεταφράζεται σε "ο κατάλογος από τον οποίο εκτελείτε το σενάριο". Εάν θέλετε, μπορείτε να χρησιμοποιήσετε την πλήρη διαδρομή προς έναν άλλο φάκελο.
Τέλος, ορίστε το LastActiveWindow σε άδεια και χρησιμοποιήστε το αργότερα για να ελέγξετε εάν το ενεργό παράθυρο έχει αλλάξει.
2. Παρακολούθηση ενεργών παραθύρων
Δεδομένου ότι θέλουμε να παρακολουθούμε συνεχώς ποιο παράθυρο είναι ενεργό και αν αλλάξει, να καταγράψουμε τον τίτλο και την ώρα, θα πρέπει να χρησιμοποιήσουμε ένα «βρόχο».
Όπως υποδηλώνει το όνομα, ένας βρόχος εκτελείται συνεχώς, επαναλαμβάνοντας τις ίδιες λειτουργίες. Χάρη στην απλή σύνταξη του AHK, ο ακόλουθος «κώδικας» είναι σχετικά εύκολο να κατανοηθεί:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Ορίστε έναν βρόχο πληκτρολογώντας απλώς τη λέξη "loop" και στη συνέχεια σημειώνοντας την αρχή του με "{" και τελειώνοντας με "}". Όλα στις γραμμές μεταξύ "{" και "}" θα τρέχουν για πάντα μέχρι να βγείτε από το σενάριο.
Ξεκινήστε τον βρόχο περιμένοντας ( Sleep ) για χρονικό διάστημα ίσο με τη μεταβλητή SleepTime. Αυτή η μεταβλητή κάνει τον έλεγχο του χρόνου πιο απλό. Αντί να επεξεργαστείτε μόνοι σας το σενάριο, μπορείτε να του "πείτε", μέσω αυτής της μεταβλητής, πόσα δευτερόλεπτα πρέπει να διαρκεί κάθε βρόχος.
Τέλος, χρησιμοποιήστε το Message Box για να δοκιμάσετε το σενάριο. Δοκιμάστε να το αποθηκεύσετε και να το εκτελέσετε (κάντε διπλό κλικ στο αρχείο του σεναρίου). Θα δείτε ένα πλαίσιο μηνύματος που λέει "Λειτουργεί!" (το σενάριο λειτουργεί) μετά από 10 δευτερόλεπτα.
Κάντε δεξί κλικ στο εικονίδιο του AHK στο δίσκο των Windows και βγείτε από τη δέσμη ενεργειών όταν έχετε αρκετά πλαίσια μηνυμάτων. Στη συνέχεια, επιστρέψτε στο πρόγραμμα επεξεργασίας και αντικαταστήστε τη γραμμή MsgBox με:
WinGetActiveTitle, ActiveWindow
Αυτή είναι η εντολή για να λάβετε τον τίτλο του ενεργού παραθύρου. Παραλείψτε την επιπλέον γραμμή "StoreActiveWindow" που χρησιμοποίησε το παράδειγμα κατά τη σύνταξη σεναρίων για δοκιμή.

Λάβετε τον τίτλο του ενεργού παραθύρου και αποθηκεύστε το σε μια μεταβλητή
3. Λάβετε την τρέχουσα ώρα και το όνομα
Τώρα έρχεται ο πυρήνας της λογικής του σεναρίου. Συγκρίνετε το όνομα του ενεργού παραθύρου με το προηγούμενο και αν διαφέρουν, "κάντε κάτι". Όλα είναι τόσο απλά όπως αυτό:
If ActiveWindow != %LastActiveWindow%
{
}
Λαμβάνοντας υπόψη τα παραπάνω, ελέγξτε εάν το τρέχον ActiveWindow είναι διαφορετικό ( != ) από την τιμή που είναι αποθηκευμένη στη μεταβλητή LastActiveWindow (η οποία αρχικά είχε οριστεί σε άδεια). Εάν ναι, το AHK θα εκτελέσει τον κώδικα μεταξύ { και } , ο οποίος αυτή τη στιγμή είναι κενός.
Ρυθμίστε τη λειτουργία για σύγκριση του τίτλου του ενεργού παραθύρου και του προηγούμενου παραθύρου
Είναι απαραίτητο να παρακολουθείτε τόσο την ημερομηνία όσο και την ώρα για τη μέτρηση του χρόνου λειτουργίας ενός παραθύρου. Διαφορετικά αρχεία καταγραφής για κάθε ημέρα, χρησιμοποιώντας την ημερομηνία στο όνομά τους θα διατηρηθούν. Όχι μόνο κάθε αλλαγή αλλά και η ώρα που συμβαίνει θα καταγράφεται. Για να το κάνετε αυτό, αντιστοιχίστε διαφορετικές μορφές ώρας στις μεταβλητές LogTime και LogFilename , με:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Προσθέστε αυτές τις γραμμές ανάμεσα στα σγουρά άγκιστρα στο "If ActiveWindow..." , έτσι ώστε το AHK να τις εκτελεί όταν ανιχνεύσει μια αλλαγή παραθύρου.

Λάβετε την τρέχουσα ώρα και αντιστοιχίστε την σε δύο μεταβλητές διαφορετικών μορφών
4. Μορφή δεδομένων
Καταγράφουμε τώρα την ώρα σε δύο διαφορετικές μεταβλητές, καθώς και τον τίτλο του ενεργού παραθύρου. Ωστόσο, υπάρχει ένα μικρό πρόβλημα: Ο τίτλος του παραθύρου μπορεί επίσης να περιέχει ανεπιθύμητους χαρακτήρες. Είναι δυνατό να αφαιρέσετε όλους τους μη αλφαριθμητικούς χαρακτήρες χρησιμοποιώντας την υποστήριξη του AHK για RegEx, με:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Έχοντας αυτό κατά νου, ας "ζητήσουμε" από το AHK να αφαιρέσει όλους τους χαρακτήρες από τη μεταβλητή ActiveWindow που δεν ταιριάζουν με αυτό που υπάρχει στις αγκύλες:
- Πεζά
- Κεφαλαίο γράμμα
- Αριθμοί
Στη συνέχεια, αντιστοιχίστε το αποτέλεσμα στη μεταβλητή LogWindow.

Καθαρίστε τον τίτλο του ενεργού παραθύρου με το RegEx
Με όλες τις μεταβλητές καθορισμένες και όλα τα πολύτιμα δεδομένα που έχουν συλλεχθεί, είστε πλέον έτοιμοι να μορφοποιήσετε το αρχείο καταγραφής και τα περιεχόμενά του.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Προηγουμένως, αντιστοιχούσαμε την τρέχουσα ημερομηνία στη μεταβλητή LogFilename. Επομένως, για την πρώτη γραμμή, προσθέστε το "_AppLog.md" στην ημερομηνία για να το χρησιμοποιήσετε ως όνομα αρχείου.

Ορίστε το όνομα του αρχείου καταγραφής
Στη δεύτερη γραμμή, συνδυάστε τη μεταβλητή LogPath , που ορίστηκε στην αρχή ως προορισμός για το αρχείο καταγραφής μαζί με το όνομα του αρχείου. Ο συνδυασμός τους είναι το πλήρες όνομα διαδρομής του αρχείου καταγραφής, που έχει εκχωρηθεί στη μεταβλητή LogFile.
Ας αντιστοιχίσουμε την ισοδύναμη τιμή "κενής γραμμής, Χρόνος - Όνομα παραθύρου, δύο ακόμη κενές γραμμές, ένα διαχωριστικό και μια άλλη κενή γραμμή, για καλό μέτρο" στη μεταβλητή FileContent.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- Το γράμμα "n" λέει στο AHK να εισάγει μια νέα γραμμή (ισοδύναμο με το πάτημα Enter μία φορά).
- Τρεις παύλες θα εμφανιστούν ως διαχωριστικό όταν εμφανίζονται σε ένα πρόγραμμα προβολής συμβατό με cross-down.
- Το "% LogTime%" και το "% LogWindow%" είναι μεταβλητές που αποθηκεύουν το όνομα του ενεργού παραθύρου και την ώρα που ανιχνεύτηκε.

Καθορίζει τα περιεχόμενα του αρχείου καταγραφής
5. Ενημερώστε τα αρχεία
Έχετε ορίσει τι θέλουμε να γράψουμε στο αρχείο, καθώς και τη διαδρομή και το όνομα του αρχείου. Το μόνο που μένει είναι το πραγματικό, απλό κείμενο ως εξής:
FileAppend, %FileContent%, %LogFile%
Προσθέστε τα πάντα στη μεταβλητή "FileContent" στο αρχείο "LogFile".

Χρησιμοποιήστε τη συνάρτηση Append του AHK για να ενημερώσετε το αρχείο καταγραφής ή να δημιουργήσετε ένα από την αρχή
Η συνάρτηση "append" θα προσθέσει το "FileContent" στο αρχείο εάν υπάρχει, αλλά θα το δημιουργήσει επίσης από την αρχή εάν το αρχείο δεν υπάρχει.
Υπάρχει ένα τελευταίο tweak: αντικαταστήστε τα περιεχόμενα της μεταβλητής LastActiveWindow με το τρέχον ενεργό παράθυρο.

Εισάγει τον τίτλο του τρέχοντος ενεργού παραθύρου στη μεταβλητή LastActiveWindow για μελλοντική δοκιμή
Για να γίνει αυτό, το σενάριο θα πρέπει να μπορεί να ανιχνεύσει την επόμενη αλλαγή παραθύρου.
LastActiveWindow = %ActiveWindow%
Και με αυτήν την τελευταία προσθήκη, το καταγραφικό των Windows είναι έτοιμο! Αποθηκεύστε το σενάριο και εκτελέστε το. Στη συνέχεια, ελέγξτε το αρχείο σήμανσης, αυτό το αρχείο θα εμφανιστεί στο φάκελο του αρχείου σεναρίου μετά από 10 δευτερόλεπτα.

Το αρχείο καταγραφής των Windows δημιουργείται στον ίδιο κατάλογο με το σενάριο
Πάρτε την ευθύνη του χρόνου σας
Μπορείτε να ανοίξετε το αρχείο καταγραφής με οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου. Ωστόσο, θα φαίνεται καλύτερα αν το ανοίξετε σε ένα πρόγραμμα επεξεργασίας συμβατό με σημάδια. Στο στιγμιότυπο οθόνης μπορείτε να δείτε το αρχείο καταγραφής στο δημοφιλές πρόγραμμα επεξεργασίας Typora.

Το αρχείο markdown που δημιουργείται από το σενάριο φορτώνεται στο Typora
Είναι ένας εύκολος τρόπος για να ελέγξετε ποιες εφαρμογές χρησιμοποιείτε τον περισσότερο χρόνο και απαιτείται μόνο ένα εργαλείο όπως το Σημειωματάριο για να χρησιμοποιήσετε.
Αν θέλετε κάτι "πιο ιδιαίτερο", μπορείτε πάντα να "στυλ" στην έξοδο του καταγραφικού για να δημιουργήσετε ένα αρχείο CSV. Είναι τόσο εύκολο όσο η προσαρμογή της μεταβλητής FileContent και της επέκτασης του δημιουργημένου αρχείου. Στη συνέχεια, μπορείτε να εισαγάγετε τέτοια αρχεία σε εφαρμογές όπως το Excel, το Google Calc ή ακόμα και τα προγράμματα παρακολούθησης χρόνου τρίτων.
Ολοκληρωμένο σενάριο
#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