Je begint elke dag met de beste bedoelingen, verjongd, klaar om al je taken aan te pakken. Dan kijk je hoe laat het is, het is 03:00 uur, en je vraagt je af, waar is al die tijd gebleven?
Je zou een speciale tijdregistratie-app kunnen gebruiken, maar die kunnen irritant complex zijn. Plus, waar is het plezier daarin?
Waarom zou u in plaats daarvan niet uw eigen eenvoudige mini-app maken, die alle vensters kan volgen waar u gedurende de dag tijd aan hebt besteed? Je hebt alleen AutoHotKey nodig, een eenvoudige tekstverwerker zoals Kladblok, en ongeveer een half uur. Laten we vastlopen.
Wat is AutoHotKey?
Het primaire doel van AutoHotKey is desktopautomatisering. Het is een scripttaal waarmee u toetsaanslagen en muisbewegingen naar elk actief venster kunt sturen, sneltoetsen kunt maken of toetsaanslagen kunt wijzigen. U kunt het bijvoorbeeld gebruiken om specifieke toetsen op uw toetsenbord uitschakelen.
Dat is echter de korte versie van het verhaal en niet echt representatief voor wat AutoHotKey (kortweg AHK) kan doen. Dat komt omdat het sinds de eerste conceptie is geëvolueerd en nu een complete scripttaal is. Je kunt denken aan wat je ermee kunt doen als 'Lite programmeren'.
Zo kun je AHK ook gebruiken om mini-apps te maken, precies zoals we ons in dit artikel als doel hebben gesteld. Merk op dat we in dit artikel rechtstreeks in AHK duiken, dus misschien wil je dit controleren onze snelle AutoHotKey-gids voor beginners voordat u aan de slag gaat.
Uw eigen script voor het loggen van vensters maken met AutoHotKey
Voordat we beginnen, moet u AHK op uw computer hebben geïnstalleerd, omdat het zal fungeren als de "parser" voor uw script. Het is "de motor" die ervoor zorgt dat uw script "uitgevoerd" wordt.
Opmerking: je kunt je script ook compileren nadat het klaar is om er een echt uitvoerbaar programma van te maken. Dat valt echter buiten het bestek van dit artikel.
AutoHotKey downloaden van de officiële site en installeer het.
Start uw favoriete bestandsbeheerder en bezoek een map waarin u uw script wilt opslaan. Klik vervolgens met de rechtermuisknop op een lege plek en kies Nieuw > AutoHotKey-script.
Zodra dat is gebeurd, is het tijd om het eigenlijke script te schrijven.
1. Definieer de benodigde variabelen
Open het script in je favoriete editor. Je kunt zoiets eenvoudigs gebruiken als Kladblok dat bij Windows wordt geleverd, maar we zullen het gebruiken Kladblok++ voor deze gids. Aangezien Notepad++ gratis is en beter is afgestemd op het doel, is het de moeite waard om het uit te proberen. Check ook zeker onze ultieme gids over al zijn sneltoetsen terwijl je het bekijkt.
Houd er rekening mee dat u geen enkele app zoals Word of Google Docs moet gebruiken, die de opmaak kan beïnvloeden. Gebruik een tekst- of "code"-editor.
Het script bevat al enkele basisprincipes die worden aanbevolen voor compatibiliteit en prestaties. Laat ze zoals ze zijn en start je script eronder.
Beginnen met:
AppLoggingRate = 10; Tijdsinterval (in seconden) tussen het vastleggen van actieve venstertitels.
Slaaptijd := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
We beginnen met het toewijzen van de waarde "10" aan AppLoggingRate, die we zullen gebruiken om de tijd tussen het vastleggen van venstertitels te berekenen.
Bij gebruik met de slaapfunctie van AHK is 1000 ongeveer gelijk aan een seconde. Dus door het te vermenigvuldigen met AppLogingRate, maken we de variabele SleepTime "gelijk aan tien seconden".
LogPath is het pad waar we onze logboeken willen opslaan. We gebruiken de waarde %A_ScriptDir%, wat zich vertaalt naar "de map van waaruit u het script uitvoert". U kunt desgewenst het volledige pad naar een andere map gebruiken.
Ten slotte stellen we LastActiveWindow in op blanco. We zullen dit later gebruiken om te controleren of het actieve venster is gewijzigd.
2. Bewaak de actieve Windows
Omdat we continu willen bijhouden welk venster actief is, en als het verandert, de titel en tijd loggen, moeten we "een lus" gebruiken.
Zoals de naam al aangeeft, loopt er continu een lus, die dezelfde functie(s) herhaalt. Dankzij de duidelijke syntaxis van AHK zijn we van mening dat de volgende "code" relatief voor zichzelf spreekt:
Lus
{
Slaap %SleepTime%
Berichtenbox, het werkt!
}
We definiëren 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 doorlopen totdat u het script afsluit.
We beginnen de lus door te wachten (Sleep) voor een hoeveelheid tijd die gelijk is aan de variabele SleepTime. We hebben het in het vorige hoofdstuk als variabele ingesteld om het regelen van de tijd eenvoudiger te maken. In plaats van het script zelf te bewerken, kunt u het via deze variabele "vertellen" hoeveel seconden elke lus moet duren.
Ten slotte gebruiken we een berichtenvenster om ons script te testen. Probeer het op te slaan en uit te voeren (dubbelklik op het bestand). U ziet een berichtvenster met de tekst "Het werkt!" na tien seconden.
Klik met de rechtermuisknop op het pictogram van AHK in het Windows-vak en verlaat het script als je genoeg berichtenvensters hebt gehad. Ga vervolgens terug naar uw editor en vervang de MsgBox-regel door:
WinGetActiveTitle, ActiveWindow
Dit is het commando om de titel van het actieve venster te krijgen. Negeer de extra regel "StoreActiveWindow", die we gebruikten bij het schrijven van het testscript.
3. Krijg de huidige tijd en naam
Nu komt het kerngedeelte van de logica van het script. We willen dat het de naam van het actieve venster vergelijkt met het vorige, en als ze anders zijn, "iets doen". Het is zo simpel als het volgende:
Als ActiveWindow != %LastActiveWindow%
{
}
Met het bovenstaande controleren we of het huidige ActiveWindow anders is (!=) dan de waarde die is opgeslagen in de variabele LastActiveWindow (die we aanvankelijk op blanco hadden gezet). Als dit het geval is, voert AHK de code uit tussen { en }, die voorlopig leeg zijn.
We moeten zowel de datum als de tijd bijhouden om te meten hoe lang een venster actief is geweest. We houden voor elke dag verschillende logboeken bij, waarbij de datum in hun naam wordt gebruikt. En we willen niet alleen elke vensterwijziging registreren, maar ook wanneer het gebeurde. Daarvoor zullen we verschillende tijdformaten toewijzen aan de variabelen LogTime en LogFilename, met:
FormatTime, LogTime,, HH: mm: ss
FormatTime, LogFilename,, jjjj-MMM-dd
Voeg die regels toe tussen de accolades onder "If ActiveWindow...", om AHK ze te laten uitvoeren wanneer het een vensterverandering detecteert.
4. Gegevensopmaak
We hebben de tijd gepakt in twee verschillend opgemaakte variabelen, evenals de titel van het actieve venster. Er is echter een klein probleempje: de titel van een venster kan ook tekens bevatten die we niet willen. We kunnen alle niet-alfanumerieke tekens verwijderen met behulp van AHK's ondersteuning voor RegEx, met:
LogWindow := Regexreplace (ActiveWindow, "[^a-zA-Z0-9]", " ")
Hiermee "vertellen" we AHK om alle tekens uit de ActiveWindow-variabele te verwijderen die niet overeenkomen met wat tussen haakjes staat:
- Kleine letters
- Hoofdletters
- Cijfers
Vervolgens wijzen we het resultaat toe aan de variabele LogWindow.
Nu alle variabelen zijn ingesteld en alle waardevolle gegevens zijn verzameld, zijn we klaar om ons logbestand en de inhoud ervan te formatteren.
LogBestandsnaam = %LogBestandsnaam%_AppLog.md
LogFile = %LogPath%\%LogFilename%
We hebben eerder de huidige datum toegewezen aan de variabele LogFilename. Met de eerste regel geven we dus alleen aan dat we "_AppLog.md" aan de datum willen toevoegen om het als bestandsnaam te gebruiken.
In de tweede regel combineren we de variabele LogPath, die we aan het begin hebben gedefinieerd als de bestemming voor onze logs, met de bestandsnaam. Hun combinatie is de volledige padnaam van het logboek, toegewezen aan de LogFile-variabele.
Laten we het equivalent van "lege regel, Time - Window's Name, nog twee lege regels, een scheidingslijn en nog een lege regel, voor de goede orde" toewijzen aan de FileContent-variabele.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- De "`n"'s vertellen AHK om een nieuwe regel in te voeren (het equivalent van één keer op Enter drukken).
- De drie streepjes verschijnen als een scheidingslijn wanneer ze worden gepresenteerd in een viewer die compatibel is met markdown.
- "%LogTime%" en "%LogWindow%" zijn de variabelen waarin we de naam van het actieve venster hebben opgeslagen en de tijd waarop het werd gedetecteerd.
5. Werk het bestand bij
We hebben gedefinieerd wat we naar ons bestand willen schrijven en we kennen het pad en de bestandsnaam. Het enige dat overblijft is het eigenlijke schrijven, wat net zo eenvoudig is als:
FileAppend, %FileContent%, %LogFile%
Het is bijna net zo eenvoudig als gewoon Engels: we voegen alles in de "FileContent" -variabele toe aan het bestand "LogFile".
De functie "toevoegen" zal de "FileContent" aan het bestand toevoegen als het bestaat, maar zal het ook helemaal opnieuw maken als dat niet het geval is.
Maar wacht, er is nog een laatste aanpassing: de inhoud van de LastActiveWindow-variabele vervangen door het huidige actieve venster.
Hiermee kan het script de detecteren De volgende venster veranderen.
LastActiveWindow = %ActiveWindow%
En met die laatste toevoeging is je windowlogger klaar! Sla het op en voer het uit. Bekijk vervolgens het markdown-bestand, dat na tien seconden in de map van uw scriptbestand zal verschijnen.
Beheers je tijd
U kunt uw logbestand openen met elke teksteditor. Toch zal het er mooier uitzien als je het opent in een markdown-compatibele editor. In de schermafbeelding kun je ons logboek in de populaire Typora-editor zien.
Het is een gemakkelijke manier om te controleren aan welke apps je de meeste tijd hebt besteed, en je hebt alleen iets als Kladblok nodig om het te gebruiken.
Als u iets "meer" wilt, kunt u de uitvoer van uw logger altijd "stylen" om in plaats daarvan CSV-bestanden te produceren. 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 apps zoals Excel, Google Calc of zelfs tijdregistratieprogramma's van derden.
Volledig script:
#NoEnv; Aanbevolen voor prestaties en compatibiliteit met toekomstige AutoHotkey-releases.
; #Waarschuwen; Schakel waarschuwingen in om te helpen bij het opsporen van veelvoorkomende fouten.
SendMode-invoer; Aanbevolen voor nieuwe scripts vanwege de superieure snelheid en betrouwbaarheid.
SetWorkingDir %A_ScriptDir%; Zorgt voor een consistente startdirectory.
; Variabelen
;
AppLoggingRate = 10; Tijdsinterval (in seconden) tussen het vastleggen van actieve venstertitels.
Slaaptijd := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
; Logica
;
Lus
{
Slaap %SleepTime%
WinGetActiveTitle, ActiveWindow
StoreActiveWindow = %ActiveWindow%
Als ActiveWindow != %LastActiveWindow%
{
FormatTime, LogTime,, HH: mm: ss
FormatTime, LogFilename,, jjjj-MM-dd
LogWindow := Regexreplace (ActiveWindow, "[^a-zA-Z0-9]", " ")
LogBestandsnaam = %LogBestandsnaam%_AppLog.md
LogFile = %LogPath%\%LogFilename%
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
slaap 50
FileAppend, %FileContent%, %LogFile%
LastActiveWindow = %ActiveWindow%
}
}
Uitgang
Met AutoHotkey kunt u aangepaste Windows-snelkoppelingen, macro's en meer maken! Hier zijn enkele handige AutoHotkey-scripts om u op weg te helpen.
Lees volgende
- ramen
- productiviteit
- ramen
- Autosneltoets
- Tijdsbeheer
- Productiviteitstrucs
Het echte leven van OK begon rond 10, toen hij zijn eerste computer kreeg - een Commodore 128. Sindsdien smelt hij keycaps door 24/7 te typen, in een poging The Word Of Tech te verspreiden onder iedereen die geïnteresseerd genoeg is om te luisteren. Of beter gezegd: lezen.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Klik hier om je te abonneren