Je begint elke dag vroeg met je werk, zodat je overdag alles kunt oplossen. Dan kijk je op de klok en het is 3 uur 's nachts, maar je werk is nog steeds niet klaar. Dus waar is de tijd gebleven?
U kunt een speciale tijdregistratie-app gebruiken, maar deze kunnen ingewikkeld en frustrerend zijn. Waarom zou u in plaats daarvan niet uw eigen eenvoudige kleine app maken? Deze applicatie kan alle vensters volgen die u gedurende de dag hebt gebruikt. Je hebt alleen AutoHotKey nodig, een eenvoudige tekstverwerker zoals Kladblok, en ongeveer een half uur. Laten we beginnen!
Maak uw eigen Windows-logboekscript met AutoHotKey
Voordat u begint, moet u AHK op uw computer installeren, omdat dit als een "parser" voor het script zal fungeren. Het is de tool waarmee uw script kan worden "uitgevoerd".
Opmerking : u kunt het script na voltooiing ook compileren om er een echt uitvoerbaar programma van te maken. Dat valt echter buiten het bestek van dit artikel.
Download AutoHotKey van de officiële website en installeer het.

Selecteer Nieuw > AutoHotKey-script
Start uw favoriete bestandsbeheerder en open de map waarin u het script wilt opslaan. Klik vervolgens met de rechtermuisknop op een lege locatie en selecteer Nieuw > AutoHotKey Script .
Eenmaal voltooid, is het tijd om het eigenlijke script te schrijven.
1. Identificeer de noodzakelijke variabelen
Open het script in uw favoriete editor. U kunt iets eenvoudigs gebruiken, zoals Kladblok dat bij Windows wordt geleverd, maar in het artikel wordt voor deze zelfstudie gebruik gemaakt van Notepad++ . Notepad++ is gratis en beter geschikt voor dit doel, dus u moet het uitproberen.
Houd er rekening mee dat u geen applicaties zoals Word of Google Docs mag gebruiken, omdat deze de opmaak van het script kunnen beïnvloeden. Gebruik een tekst- of code-editor.
Het script bevat enkele aanbevolen basisinformatie over compatibiliteit en prestaties. Laat ze zoals ze zijn en start het onderstaande script.
Begint met:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Begin met het toewijzen van de waarde "10" aan AppLoggingRate , die wordt gebruikt om de tijd tussen vensterlogboekpogingen te berekenen.
Bij gebruik met de slaapfunctie van AHK is 1000 ongeveer gelijk aan één seconde. Dus door het te vermenigvuldigen met AppLogingRate , maakt u de SleepTime-variabele "gelijk aan 10 seconden".
LogPath is het pad dat wordt gebruikt om logboeken op te slaan. In het voorbeeld wordt de waarde %A_ScriptDir% gebruikt , wat zich vertaalt naar "de map van waaruit u het script uitvoert". U kunt desgewenst het volledige pad naar een andere map gebruiken.
Stel ten slotte LastActiveWindow in op leegmaken en gebruik het later om te controleren of het actieve venster is gewijzigd.
2. Houd actieve vensters in de gaten
Omdat we continu willen monitoren welk venster actief is en als dit verandert, de titel en tijd willen vastleggen, zullen we een “loop” moeten gebruiken.
Zoals de naam al doet vermoeden, loopt er continu een lus, waarbij dezelfde functie(s) wordt herhaald. Dankzij de eenvoudige syntaxis van AHK is de volgende "code" relatief eenvoudig te begrijpen:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Definieer een lus door simpelweg het woord "loop" te typen en het begin ervan te markeren met "{" en te eindigen met "}". Alles in de regels tussen "{" en "}" blijft voor altijd actief totdat u het script afsluit.
Start de lus door te wachten ( Sleep ) gedurende een tijdsduur die gelijk is aan de SleepTime-variabele. Deze variabele maakt tijdcontrole eenvoudiger. In plaats van het script zelf te bewerken, kunt u via deze variabele "vertellen" hoeveel seconden elke lus moet duren.
Gebruik ten slotte Message Box om het script te testen. Probeer het op te slaan en uit te voeren (dubbelklik op het scriptbestand). U ziet een berichtvenster met de tekst 'Het werkt!' (script werkt) na 10 seconden.
Klik met de rechtermuisknop op het pictogram van AHK in het Windows-vak en sluit het script af als u voldoende berichtvensters heeft. Ga vervolgens terug naar de editor en vervang de MsgBox- regel door:
WinGetActiveTitle, ActiveWindow
Dit is het commando om de titel van het actieve venster op te halen. Laat de extra regel "StoreActiveWindow" weg die in het voorbeeld werd gebruikt tijdens het testen van scripts.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Haal de titel van het actieve venster op en sla deze op in een variabele
3. Haal de huidige tijd en naam op
Nu komt de kern van de scriptlogica. Vergelijk de naam van het actieve venster met de vorige, en als deze verschillen, "doe dan iets". Alles is zo eenvoudig als dit:
If ActiveWindow != %LastActiveWindow%
{
}
Controleer, gezien het bovenstaande, of de huidige ActiveWindow verschilt ( != ) van de waarde die is opgeslagen in de LastActiveWindow- variabele (die aanvankelijk was ingesteld op leeg). Als dat zo is, zal AHK de code tussen { en } uitvoeren , die momenteel leeg is.
Stel de functie in om de titel van het actieve venster en het vorige venster te vergelijken
Het is noodzakelijk om zowel de datum als de tijd bij te houden om de uptime van een venster te meten. Er worden voor elke dag verschillende logboeken bewaard, waarbij de datum in hun naam wordt gebruikt. Niet alleen elke wijziging, maar ook het tijdstip waarop deze plaatsvindt, wordt geregistreerd. Om dat te doen, wijst u verschillende tijdnotaties toe aan de variabelen LogTime en LogFilename , met:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Voeg deze regels toe tussen de accolades in "If ActiveWindow..." , zodat AHK ze uitvoert wanneer er een vensterwijziging wordt gedetecteerd.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Haal de huidige tijd op en wijs deze toe aan twee variabelen met verschillende formaten
4. Gegevensformaat
We leggen nu de tijd vast in twee verschillend opgemaakte variabelen, evenals de titel van het actieve venster. Er is echter een klein probleem: de titel van het venster kan ook ongewenste tekens bevatten. Het is mogelijk om alle niet-alfanumerieke tekens te verwijderen met behulp van AHK's ondersteuning voor RegEx, met:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Laten we, met dit in gedachten, AHK "vragen" om alle tekens uit de ActiveWindow-variabele te verwijderen die niet overeenkomen met wat er tussen haakjes staat:
- Kleine letters
- Hoofdletter
- Nummers
Wijs vervolgens het resultaat toe aan de LogWindow-variabele.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Ruim de titel van het actieve venster op met RegEx
Nu alle variabelen zijn ingesteld en alle waardevolle gegevens zijn verzameld, bent u nu klaar om het logbestand en de inhoud ervan te formatteren.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Voorheen hebben we de huidige datum toegewezen aan de LogFilename-variabele. Voeg daarom voor de eerste regel "_AppLog.md" toe aan de datum om deze als bestandsnaam te gebruiken.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Stel de naam van het logbestand in
Combineer op de tweede regel de variabele LogPath , die aan het begin is gedefinieerd als de bestemming voor het logbestand, samen met de bestandsnaam. Hun combinatie is de volledige padnaam van het logbestand, toegewezen aan de variabele LogFile.
Laten we voor de goede orde de equivalente waarde van "lege regel, Tijd - Vensternaam, nog twee lege regels, een scheidingslijn en nog een lege regel" toewijzen aan de FileContent-variabele.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- De letter "n" vertelt AHK dat hij een nieuwe regel moet invoeren (gelijk aan één keer op Enter drukken ).
- Er verschijnen drie streepjes als scheidingsteken wanneer ze worden weergegeven in een cross-down-compatibele viewer.
- "% LogTime%" en "% LogWindow%" zijn variabelen die de naam van het actieve venster en het tijdstip waarop het werd gedetecteerd, hebben opgeslagen.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Bepaalt de inhoud van het logbestand
5. Bestanden bijwerken
U hebt gedefinieerd wat we naar het bestand willen schrijven, evenals het pad en de bestandsnaam. Het enige dat overblijft is de feitelijke, eenvoudige tekst als volgt:
FileAppend, %FileContent%, %LogFile%
Voeg alles in de variabele "FileContent" toe aan het bestand "LogFile".
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Gebruik de Append-functie van AHK om het logbestand bij te werken of een geheel nieuw bestand te maken
De functie "append" voegt "FileContent" toe aan het bestand als het bestaat, maar maakt het ook helemaal opnieuw als het bestand niet bestaat.
Er is nog een laatste aanpassing: vervang de inhoud van de LastActiveWindow- variabele door het momenteel actieve venster.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Voegt de titel van het huidige actieve venster in de LastActiveWindow-variabele in voor toekomstig testen
Om dit te doen, moet het script de volgende vensterwijziging kunnen detecteren.
LastActiveWindow = %ActiveWindow%
En met die laatste toevoeging is de Windows-logger klaar! Sla het script op en voer het uit. Controleer vervolgens het markdown-bestand. Dit bestand verschijnt na 10 seconden in de map met scriptbestanden.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Het Windows-logbestand wordt in dezelfde map gemaakt als het script
Neem de controle over je eigen tijd
U kunt het logbestand met elke teksteditor openen. Het ziet er echter beter uit als u het opent in een editor die compatibel is met markdown. In de schermafbeelding zie je het log in de populaire Typora-editor.
![Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey Hoe u een tijdregistratietoepassing op Windows kunt maken met AutoHotKey]()
Het door het script gegenereerde markdown-bestand wordt in Typora geladen
Het is een gemakkelijke manier om te controleren welke apps je het meest gebruikt en je hebt alleen een tool als Kladblok nodig.
Als u iets "specialers" wilt, kunt u de uitvoer van de logger altijd "stijlen" om in plaats daarvan een CSV-bestand te maken. Het is net zo eenvoudig als het aanpassen van de FileContent- variabele en de extensie van het gemaakte bestand. U kunt dergelijke bestanden vervolgens importeren in toepassingen zoals Excel, Google Calc of zelfs tijdregistratie van derden.
Compleet script
#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