Du starter dit arbejde hver dag tidligt, så du kan løse alt i løbet af dagen. Så tjekker du uret, og det er 3 om morgenen, men dit arbejde er stadig ikke færdigt. Så hvor er tiden blevet af?
Du kan bruge en dedikeret tidsregistreringsapp, men disse kan være komplicerede og frustrerende. Hvorfor ikke i stedet oprette din egen enkle lille app? Denne applikation kan spore alle de vinduer, du har brugt i løbet af dagen. Du skal bare bruge AutoHotKey, en grundlæggende tekstbehandler som Notesblok, og cirka en halv time. Lad os komme igang!
Opret dit eget Windows-logningsscript med AutoHotKey
Før du starter, bør du installere AHK på din computer, fordi det vil fungere som en "parser" for scriptet. Det er værktøjet, der tillader dit script at "køre".
Bemærk : Du kan også kompilere scriptet efter færdiggørelsen for at gøre det til et rigtigt eksekverbart program. Det er dog uden for rammerne af denne artikel.
Download AutoHotKey fra den officielle hjemmeside og installer den.

Vælg Ny > AutoHotKey Script
Tænd din foretrukne filhåndtering og få adgang til den mappe, hvor du vil gemme scriptet. Højreklik derefter på en tom placering og vælg Ny > AutoHotKey Script .
Når det er færdigt, er det tid til at skrive selve manuskriptet.
1. Identificer nødvendige variabler
Åbn scriptet i din yndlingseditor. Du kan bruge noget simpelt som Notepad, der følger med Windows, men artiklen vil bruge Notepad++ til denne tutorial. Notepad++ er gratis og bedre tilpasset til dette formål, så du bør prøve det af.
Bemærk, at du ikke bør bruge nogen programmer såsom Word eller Google Docs, som kan påvirke scriptets formatering. Brug en tekst- eller kodeeditor.
Scriptet vil indeholde nogle grundlæggende anbefalede oplysninger om kompatibilitet og ydeevne. Lad dem være, som de er, og start scriptet nedenfor.
Starter med:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Start med at tildele værdien "10" til AppLoggingRate , som vil blive brugt til at beregne tiden mellem vindueslogningsforsøg.
Når den bruges sammen med AHK's Sleep-funktion, er 1000 nogenlunde lig med et sekund. Så ved at gange det med AppLogingRate vil du gøre SleepTime-variablen "lig med 10 sekunder".
LogPath er stien, der bruges til at gemme logfiler. Eksemplet bruger værdien %A_ScriptDir% , som oversættes til "mappen hvorfra du kører scriptet". Du kan bruge den fulde sti til en anden mappe, hvis du vil.
Til sidst skal du indstille LastActiveWindow til at tømme og bruge senere til at kontrollere, om det aktive vindue er ændret.
2. Overvåg aktive vinduer
Da vi løbende vil overvåge, hvilket vindue der er aktivt, og hvis det ændrer sig, skal du registrere titlen og klokkeslættet, bliver vi nødt til at bruge en "loop".
Som navnet antyder, kører en løkke kontinuerligt og gentager den eller de samme funktion(er). Takket være AHKs simple syntaks er følgende "kode" relativt let at forstå:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Definer en loop ved blot at skrive ordet "loop" og derefter markere dens begyndelse med "{" og slutte med "}". Alt i linjerne mellem "{" og "}" vil køre for evigt, indtil du afslutter scriptet.
Start løkken ved at vente ( Sleep ) i et tidsrum svarende til SleepTime-variablen. Denne variabel gør tidsstyringen nemmere. I stedet for selv at redigere scriptet, kan du via denne variabel "fortælle" det, hvor mange sekunder hver loop skal vare.
Brug endelig Message Box til at teste scriptet. Prøv at gemme og køre det (dobbeltklik på script-filen). Du vil se en beskedboks, der siger "Det virker!" (script virker) efter 10 sekunder.
Højreklik på AHK's ikon i Windows-bakken og afslut scriptet, når du har fået nok beskedbokse. Gå derefter tilbage til editoren og erstat MsgBox- linjen med:
WinGetActiveTitle, ActiveWindow
Dette er kommandoen til at få titlen på det aktive vindue. Udelad den ekstra "StoreActiveWindow" -linje , som eksemplet brugte under scripting til test.

Hent titlen på det aktive vindue og gem det i en variabel
3. Få det aktuelle tidspunkt og navn
Nu kommer kernen i script-logikken. Sammenlign det aktive vindues navn med det forrige, og hvis de adskiller sig, "gør noget". Alt er så enkelt som dette:
If ActiveWindow != %LastActiveWindow%
{
}
I betragtning af ovenstående skal du kontrollere, om det aktuelle ActiveWindow er forskelligt ( != ) fra værdien, der er gemt i LastActiveWindow- variablen (som oprindeligt blev sat til tom). Hvis det er tilfældet, vil AHK udføre koden mellem { og } , som i øjeblikket er tom.
Indstil funktionen til at sammenligne titlen på det aktive vindue og det forrige vindue
Det er nødvendigt at spore både dato og klokkeslæt for at måle oppetiden for et vindue. Forskellige logfiler for hver dag, der bruger datoen i deres navn, vil blive bevaret. Ikke kun hver ændring, men også den tid, den finder sted, vil blive registreret. For at gøre det skal du tildele forskellige tidsformater til variablerne LogTime og LogFilename med:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Tilføj disse linjer mellem de krøllede klammeparenteser i "Hvis ActiveWindow..." , så AHK kører dem, når den registrerer en vinduesændring.

Få den aktuelle tid og tildel den i to variabler i forskellige formater
4. Dataformat
Vi fanger nu tiden i to forskelligt formaterede variabler, samt titlen på det aktive vindue. Der er dog et lille problem: Vinduets titel kan også indeholde uønskede tegn. Det er muligt at fjerne alle ikke-alfanumeriske tegn ved hjælp af AHK's understøttelse af RegEx, med:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Med dette i tankerne, lad os "bede" AHK om at fjerne alle tegn fra ActiveWindow-variablen, der ikke matcher det, der står i parentes:
- Små bogstaver
- Stort bogstav
- Tal
Tildel derefter resultatet til LogWindow-variablen.

Ryd op i det aktive vindues titel med RegEx
Med alle variabler indstillet og alle værdifulde data indsamlet, er du nu klar til at formatere logfilen og dens indhold.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Tidligere tildelte vi den aktuelle dato til variabelen LogFilename. Derfor, for den første linje, skal du tilføje "_AppLog.md" til datoen for at bruge det som filnavn.

Indstil logfilens navn
På den anden linje skal du kombinere variablen LogPath , defineret i begyndelsen som destinationen for logfilen sammen med filnavnet. Deres kombination er det fulde stinavn på logfilen, der er tildelt variablen LogFile.
Lad os tildele den ækvivalente værdi af "tom linje, Tid - Vinduets navn, to tomme linjer mere, en divider og en anden tom linje, for en god ordens skyld" til FileContent-variablen.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- Bogstavet "n" fortæller AHK at indtaste en ny linje (svarende til at trykke på Enter én gang).
- Tre bindestreger vises som en separator, når de vises i en cross-down-kompatibel fremviser.
- "% LogTime%" og "% LogWindow%" er variabler, der lagrede navnet på det aktive vindue og tidspunktet, det blev registreret.

Bestemmer indholdet af logfilen
5. Opdater filer
Du har defineret, hvad vi vil skrive til filen, samt dens sti og filnavn. Tilbage er blot den egentlige, enkle tekst som følger:
FileAppend, %FileContent%, %LogFile%
Føj alt i "FileContent" -variablen til "LogFile"-filen.

Brug AHK's Tilføj-funktion til at opdatere logfilen eller oprette en fra bunden
Funktionen "tilføj" vil tilføje "FileContent" til filen, hvis den findes, men vil også oprette den fra bunden, hvis filen ikke findes.
Der er en sidste tweak: Erstat indholdet af LastActiveWindow- variablen med det aktuelt aktive vindue.

Indsætter titlen på det aktuelle aktive vindue i LastActiveWindow-variablen til fremtidig test
For at gøre dette skal scriptet være i stand til at registrere den næste vinduesændring.
LastActiveWindow = %ActiveWindow%
Og med den sidste tilføjelse er Windows-loggeren klar! Gem scriptet og kør det. Tjek derefter markdown-filen, denne fil vises i script-filmappen efter 10 sekunder.

Windows-logfilen oprettes i samme mappe som scriptet
Tag ansvar for din egen tid
Du kan åbne logfilen med en hvilken som helst teksteditor. Det vil dog se bedre ud, hvis du åbner det i en markdown-kompatibel editor. På skærmbilledet kan du se loggen i den populære Typora-editor.

Markdown-filen, der genereres af scriptet, indlæses i Typora
Det er en nem måde at tjekke, hvilke apps du har brugt mest tid og kræver kun et værktøj som Notesblok at bruge.
Hvis du vil have noget "mere specielt", kan du altid "style" loggerens output til i stedet at oprette en CSV-fil. Det er lige så nemt som at justere FileContent- variablen og udvidelsen af den oprettede fil. Du kan derefter importere sådanne filer til applikationer som Excel, Google Calc eller endda tredjeparts tidsregistrering.
Komplet 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