Du börjar varje dag med de bästa avsikterna, föryngrad, redo att ta dig an alla dina uppgifter. Sedan kollar du klockan, den är 03:00 och du kan inte låta bli att undra vart har all tid tagit vägen?

Du kan använda en dedikerad tidsspårningsapp, men de kan vara irriterande komplexa. Plus, var är det roliga med det?

Varför inte göra din egen enkla mini-app istället, som kan spåra alla fönster du har spenderat tid på under dagen? Du behöver bara AutoHotKey, en grundläggande ordbehandlare som Notepad, och ungefär en halvtimme. Låt oss fastna i.

Vad är AutoHotKey?

AutoHotKeys primära syfte är skrivbordsautomation. Det är ett skriptspråk med vilket du kan skicka tangenttryckningar och musrörelser till vilket aktivt fönster som helst, skapa snabbtangenter eller ändra tangenttryckningar. Du kan till exempel använda den för att inaktivera specifika tangenter på ditt tangentbord.

Det är dock den korta versionen av historien och inte riktigt representativ för vad AutoHotKey (förkortat AHK) kan göra. Det beror på att det har utvecklats sedan dess första uppfattning och nu är ett komplett skriptspråk. Du kan tänka på vad du kan göra med det som "programmering Lite."

Således kan du också använda AHK för att skapa miniappar, precis som det vi satt som vårt mål för den här artikeln. Observera att i den här artikeln kommer vi att dyka direkt in i AHK, så du kanske vill kolla vår snabba AutoHotKey-guide för nybörjare innan du sätter igång.

Skapa ditt eget fönsterloggningsskript med AutoHotKey

Innan vi börjar bör du ha AHK installerat på din dator eftersom det kommer att fungera som "parser" för ditt skript. Det är "motorn" som gör att ditt skript "körs".

Obs: Du kan också kompilera ditt skript efter att det är klart för att göra det till ett verkligt körbart program. Det ligger dock utanför ramen för denna artikel.

Ladda ner AutoHotKey från dess officiella webbplats och installera den.

Starta din favoritfilhanterare och besök en mapp där du vill lagra ditt skript. Högerklicka sedan på en tom plats och välj Nytt > AutoHotKey-skript.

När det är gjort är det dags att skriva själva manuset.

1. Definiera nödvändiga variabler

Öppna skriptet i din favoritredigerare. Du kan använda något så enkelt som Anteckningar som följer med Windows, men vi kommer att använda det Anteckningar++ för denna guide. Eftersom Notepad++ är gratis och bättre anpassat för ändamålet är det värt att testa det. Se till att också kolla vår ultimata guide om alla dess kortkommandon medan du kollar upp det.

Observera att du inte bör använda någon app som Word eller Google Docs, som kan påverka dess formatering. Använd antingen en text- eller "kodredigerare".

Skriptet kommer redan att innehålla några grunder som rekommenderas för kompatibilitet och prestanda. Lämna dem som de är och starta ditt manus under dem.

Börja med:

AppLoggingRate = 10; Tidsintervall (i sekunder) mellan aktiva fönsterrubriker.
SleepTime:= AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =

Vi börjar med att tilldela värdet "10" till AppLoggingRate, som vi kommer att använda för att beräkna tiden mellan att fånga fönstertitlar.

När den används med AHK: s Sleep-funktion är 1000 ungefär lika med en sekund. Så, genom att multiplicera det med AppLogingRate, gör vi variabeln SleepTime "lika med tio sekunder".

LogPath är sökvägen där vi vill lagra våra loggar. Vi använder värdet %A_ScriptDir%, vilket översätts till "mappen där du kör skriptet". Du kan använda hela sökvägen till en annan mapp om du vill.

Slutligen ställer vi in ​​LastActiveWindow till tomt. Vi kommer att använda detta senare för att kontrollera om det aktiva fönstret har ändrats.

2. Övervaka Active Windows

Eftersom vi kontinuerligt vill hålla reda på vilket fönster som är aktivt, och om det ändras, logga dess titel och tid, måste vi använda "en loop".

Som namnet anger körs en loop kontinuerligt och upprepar samma funktion(er). Tack vare AHK: s enkla syntax tror vi att följande "kod" är relativt självförklarande:

Slinga
{
Sov %SleepTime%
Msgbox, det fungerar!
}

Vi definierar en loop genom att helt enkelt skriva ordet "loop" och sedan markera dess början med "{" och sluta med "}". Allt på raderna mellan "{" och "}" kommer att köras evigt tills du avslutar skriptet.

Vi börjar slingan med att vänta (Sleep) under en tid lika med variabeln SleepTime. Vi ställde in den som en variabel i föregående kapitel för att göra det enklare att kontrollera tiden. Istället för att redigera själva skriptet kan du "berätta" för det, genom denna variabel, hur många sekunder varje slinga ska pågå.

Slutligen använder vi en meddelandelåda för att testa vårt skript. Försök att spara och köra den (dubbelklicka på filen). Du kommer att se en meddelanderuta som säger "Det fungerar!" efter tio sekunder.

Högerklicka på AHK: s ikon i Windows-facket och avsluta skriptet när du har fått tillräckligt med meddelanderutor. Gå sedan tillbaka till din editor och ersätt MsgBox-raden med:

WinGetActiveTitle, ActiveWindow

Detta är kommandot för att få det aktiva fönstrets titel. Ignorera den extra "StoreActiveWindow"-raden, som vi använde när vi skrev skriptet för testning.

3. Få aktuell tid och namn

Nu kommer kärndelen av manusets logik. Vi vill att det ska jämföra det aktiva fönstrets namn med det föregående, och om de är annorlunda, "gör något". Det är så enkelt som följande:

If ActiveWindow != %LastActiveWindow%
{
}

Med ovanstående kontrollerar vi om det aktuella ActiveWindow är annorlunda (!=) än värdet som lagras i variabeln LastActiveWindow (som vi initialt har satt till tom). Om så är fallet kommer AHK att köra koden mellan { och }, som för närvarande är tomma.

Vi behöver hålla reda på både datum och tid för att mäta hur länge ett fönster har varit aktivt. Vi kommer att hålla olika loggar för varje dag, med datumet i deras namn. Och vi vill logga inte bara varje fönsterbyte utan också när det hände. För det kommer vi att tilldela olika tidsformat till variablerna LogTime och LogFilename, med:

FormatTime, LogTime,, HH: mm: ss
FormatTime, LogFilename,, yyyy-MMM-dd

Lägg till dessa linjer mellan de krulliga parenteserna under "Om aktivt fönster...", för att få AHK att köra dem när den upptäcker en fönsterändring.

4. Dataformatering

Vi har tagit tiden i två olika formaterade variabler, såväl som det aktiva fönstrets titel. Det finns dock ett litet problem: ett fönsters titel kan också innehålla tecken som vi inte vill ha. Vi kan ta bort alla icke-alfanumeriska tecken med hjälp av AHK: s stöd för RegEx, med:

LogWindow := Regexreplace (ActiveWindow, "[^a-zA-Z0-9]", " ")

Med detta "säger" vi AHK att ta bort alla tecken från ActiveWindow-variabeln som inte matchar vad som står inom parentes:

  • Gemener
  • Versala bokstäver
  • Tal

Sedan tilldelar vi resultatet till variabeln LogWindow.

Med alla variabler inställda och all värdefull data hämtad är vi redo att formatera vår loggfil och dess innehåll.

LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%

Vi tilldelade tidigare det aktuella datumet till variabeln LogFilename. Således, med den första raden, säger vi bara att vi vill lägga till "_AppLog.md" till datumet för att använda det som ett filnamn.

På den andra raden kombinerar vi variabeln LogPath, som vi definierade i början som destination för våra loggar, med filnamnet. Deras kombination är loggens fullständiga sökväg, tilldelad LogFile-variabeln.

Låt oss tilldela motsvarigheten till "tom rad, tid - fönstrets namn, ytterligare två tomma rader, en avdelare och en annan tom rad, för gott skull" till variabeln FileContent.

FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
  • "`n" säger åt AHK att ange en ny rad (motsvarande att trycka på Enter en gång).
  • De tre strecken kommer att visas som en avdelare när de presenteras i en markdown-kompatibel tittare.
  • "%LogTime%" och "%LogWindow%" är variablerna där vi har lagrat det aktiva fönstrets namn och tidpunkten då det upptäcktes.

5. Uppdatera filen

Vi har definierat vad vi vill skriva till vår fil, och vi vet dess sökväg och filnamn. Allt som återstår är själva skrivandet, vilket är så enkelt som:

FileAppend, %FileContent%, %LogFile%

Det är nästan lika enkelt som vanlig engelska: vi lägger till allt i variabeln "FileContent" till filen "LogFile".

Funktionen "lägg till" kommer att lägga till "FileContent" till filen om den finns men kommer också att skapa den från början om den inte gör det.

Men vänta, det finns en sista tweak: att ersätta LastActiveWindow-variabelns innehåll med det för närvarande aktiva fönstret.

Med detta kommer skriptet att kunna upptäcka Nästa fönsterbyte.

LastActiveWindow = %ActiveWindow%

Och med det sista tillägget är din fönsterlogger redo! Spara den och kör den. Kolla sedan in markdown-filen, som visas i din skriptfils mapp efter tio sekunder.

Bemästra din tid

Du kan öppna din loggfil med vilken textredigerare som helst. Ändå kommer det att se snyggare ut om du öppnar det i en markdown-kompatibel redigerare. På skärmdumpen kan du se vår logg i den populära Typora-redigeraren.

Det är ett enkelt sätt att kontrollera vilka appar du har använt mest tid, och du behöver bara något som Notepad för att använda det.

Om du vill ha något "mer" kan du alltid "stila" din loggers utdata för att producera CSV-filer istället. Det är lika enkelt som att justera FileContent-variabeln och den skapade filens tillägg. Du kan sedan importera sådana filer till appar som Excel, Google Calc eller till och med tredjeparts tidsspårare.

Fullständigt manus:

#NoEnv; Rekommenderas för prestanda och kompatibilitet med framtida AutoHotkey-utgåvor.
; #Varna; Aktivera varningar för att hjälpa till att upptäcka vanliga fel.
SendMode Input; Rekommenderas för nya skript på grund av dess överlägsna hastighet och tillförlitlighet.
SetWorkingDir %A_ScriptDir%; Säkerställer en konsekvent startkatalog.
; Variabler
;
AppLoggingRate = 10; Tidsintervall (i sekunder) mellan aktiva fönsterrubriker.
SleepTime:= AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
; Logik
;
Slinga
{
Sov %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
sova 50
FileAppend, %FileContent%, %LogFile%
LastActiveWindow = %ActiveWindow%
}
}
Utgång
10 coola AutoHotkey-skript (och hur du gör dina egna!)

AutoHotkey låter dig skapa anpassade Windows-genvägar, makron och mer! Här är några användbara AutoHotkey-skript för att komma igång.

Läs Nästa

Dela med sigTweetE-post
Relaterade ämnen
  • Windows
  • Produktivitet
  • Windows
  • AutoHotkey
  • Tidsplanering
  • Produktivitetsknep
Om författaren
Odysseas Kourafalos (12 publicerade artiklar)

OK: s verkliga liv började runt 10, när han fick sin första dator - en Commodore 128. Sedan dess har han smält nyckelkapslar genom att skriva 24/7, och försökt sprida The Word Of Tech till alla som är intresserade nog att lyssna. Eller snarare läsa.

Mer från Odysseas Kourafalos

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera