Z delom začnete vsak dan zgodaj, da lahko vse rešite čez dan. Nato pogledate na uro in ura je 3 zjutraj, a vaše delo še vedno ni opravljeno. Kam je torej izginil čas?
Uporabite lahko namensko aplikacijo za sledenje časa, vendar je to lahko zapleteno in frustrirajoče. Zakaj ne bi namesto tega ustvarili svoje preproste majhne aplikacije? Ta aplikacija lahko spremlja vsa okna, ki ste jih uporabili čez dan. Potrebujete samo AutoHotKey, osnovni urejevalnik besedil, kot je Notepad, in približno pol ure. Začnimo!
Z AutoHotKey ustvarite lasten skript za beleženje Windows
Preden začnete, namestite AHK na svoj računalnik, ker bo deloval kot "razčlenjevalnik" za skript. To je orodje, ki bo vašemu skriptu omogočilo "zagon".
Opomba : skript lahko po dokončanju tudi prevedete, da ga spremenite v pravi izvedljiv program. Vendar to presega področje uporabe tega članka.
Prenesite AutoHotKey z uradnega spletnega mesta in ga namestite.

Izberite Novo > AutoHotKey Script
Zaženite svojega najljubšega upravitelja datotek in odprite mapo, v katero želite shraniti skript. Nato z desno miškino tipko kliknite prazno mesto in izberite Novo > AutoHotKey Script .
Ko je dokončano, je čas, da napišete dejanski scenarij.
1. Identificirajte potrebne spremenljivke
Odprite skript v svojem najljubšem urejevalniku. Uporabite lahko nekaj preprostega, kot je Beležnica, ki je priložena sistemu Windows, vendar bo članek za to vadnico uporabljal Notepad++ . Notepad++ je brezplačen in bolje prilagojen za ta namen, zato ga morate preizkusiti.
Upoštevajte, da ne smete uporabljati nobenih aplikacij, kot sta Word ali Google Dokumenti, ki lahko vplivajo na oblikovanje skripta. Uporabite urejevalnik besedila ali kode.
Skript bo vseboval nekaj osnovnih priporočenih informacij o združljivosti in zmogljivosti. Pustite jih takšne, kot so, in zaženite spodnji skript.
Začne se z:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Začnite tako, da AppLoggingRate dodelite vrednost "10" , ki bo uporabljena za izračun časa med poskusi beleženja okna.
Pri uporabi s funkcijo spanja AHK je 1000 približno enako eni sekundi. Torej, če ga pomnožite z AppLogingRate , bo spremenljivka SleepTime "enaka 10 sekundam".
LogPath je pot, ki se uporablja za shranjevanje dnevnikov. Primer uporablja vrednost %A_ScriptDir% , kar pomeni "imenik, iz katerega izvajate skript". Če želite, lahko uporabite celotno pot do druge mape.
Na koncu nastavite LastActiveWindow na prazno in uporabite pozneje, da preverite, ali se je aktivno okno spremenilo.
2. Spremljajte aktivna okna
Ker želimo sproti spremljati, katero okno je aktivno in če se spremeni, zabeležiti naslov in čas, bomo morali uporabiti »zanko«.
Kot že ime pove, zanka teče neprekinjeno in ponavlja iste funkcije. Zahvaljujoč preprosti sintaksi AHK je naslednja "koda" relativno lahko razumljiva:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Definirajte zanko tako, da preprosto vtipkate besedo "zanka" in nato njen začetek označite z "{" in končate z "}". Vse v vrsticah med "{" in "}" se bo izvajalo večno, dokler ne zaprete skripta.
Zaženite zanko tako, da počakate ( Sleep ) toliko časa, kot je spremenljivka SleepTime. Ta spremenljivka olajša nadzor časa. Namesto da sami urejate skript, mu lahko prek te spremenljivke "poveste", koliko sekund naj traja posamezna zanka.
Na koncu uporabite polje za sporočila , da preizkusite skript. Poskusite ga shraniti in zagnati (dvokliknite datoteko skripta). Videli boste okno s sporočilom "Deluje!" (skript deluje) po 10 sekundah.
Z desno miškino tipko kliknite ikono AHK v vrstici Windows in zapustite skript, ko imate dovolj oken s sporočili. Nato se vrnite v urejevalnik in zamenjajte vrstico MsgBox z:
WinGetActiveTitle, ActiveWindow
To je ukaz za pridobitev naslova aktivnega okna. Izpustite dodatno vrstico »StoreActiveWindow« , ki jo je primer uporabil med skriptiranjem za testiranje.

Pridobite naslov aktivnega okna in ga shranite v spremenljivko
3. Pridobite trenutni čas in ime
Zdaj prihaja jedro logike scenarija. Primerjajte ime aktivnega okna s prejšnjim in, če se razlikujeta, naredite nekaj. Vse je tako preprosto:
If ActiveWindow != %LastActiveWindow%
{
}
Glede na zgoraj navedeno preverite, ali se trenutno aktivno okno razlikuje ( != ) od vrednosti, shranjene v spremenljivki LastActiveWindow (ki je bila prvotno nastavljena na prazno). Če je tako, bo AHK izvedel kodo med { in } , ki je trenutno prazna.
Nastavite funkcijo za primerjavo naslova aktivnega okna in prejšnjega okna
Za merjenje časa delovanja okna je potrebno spremljati datum in čas. Za vsak dan bodo ohranjeni različni dnevniki, v imenu katerih bo uporabljen datum. Zabeležena bo ne samo vsaka sprememba, ampak tudi čas, ko se pojavi. Če želite to narediti, dodelite različne časovne oblike spremenljivkam LogTime in LogFilename z:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Te vrstice dodajte med zavite oklepaje v "If ActiveWindow..." , tako da jih AHK zažene, ko zazna spremembo okna.

Pridobite trenutni čas in ga dodelite v dveh spremenljivkah različnih formatov
4. Oblika podatkov
Zdaj zajamemo čas v dveh različno oblikovanih spremenljivkah, kot tudi naslov aktivnega okna. Vendar pa obstaja majhna težava: naslov okna lahko vsebuje tudi neželene znake. Z uporabo AHK-jeve podpore za RegEx je mogoče odstraniti vse nealfanumerične znake z:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
S tem v mislih "povprašajmo" AHK, da iz spremenljivke ActiveWindow odstrani vse znake, ki se ne ujemajo s tem, kar je v oklepajih:
- Male črke
- Velika tiskana črka
- Številke
Nato dodelite rezultat spremenljivki LogWindow.

Počistite naslov aktivnega okna z RegEx
Z vsemi nastavljenimi spremenljivkami in zbranimi dragocenimi podatki ste zdaj pripravljeni na formatiranje dnevniške datoteke in njene vsebine.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Prej smo spremenljivki LogFilename dodelili trenutni datum . Zato v prvo vrstico datumu dodajte »_AppLog.md« , da ga uporabite kot ime datoteke.

Nastavite ime datoteke dnevnika
V drugi vrstici združite spremenljivko LogPath , ki je na začetku definirana kot cilj za datoteko dnevnika, skupaj z imenom datoteke. Njihova kombinacija je polno ime poti do datoteke dnevnika, dodeljeno spremenljivki LogFile.
Spremenljivki FileContent dodelimo enakovredno vrednost "prazna vrstica, čas - ime okna, še dve prazni vrstici, ločnica in še ena prazna vrstica, za dober ukrep" .
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- Črka "n" pove AHK, naj vnese novo vrstico (enakovredno enkratnemu pritisku Enter ).
- Trije pomišljaji bodo prikazani kot ločilo, ko so prikazani v pregledovalniku, združljivem s križcem navzdol.
- »% LogTime%« in »% LogWindow%« sta spremenljivki, ki sta shranili ime aktivnega okna in čas, ko je bilo zaznano.

Določa vsebino dnevniške datoteke
5. Posodobite datoteke
Določili ste, kaj želimo zapisati v datoteko, ter njeno pot in ime datoteke. Vse, kar ostane, je dejansko, preprosto besedilo, kot sledi:
FileAppend, %FileContent%, %LogFile%
Pripni vse v spremenljivki "FileContent" v datoteko "LogFile".

Uporabite funkcijo AHK Append, da posodobite datoteko dnevnika ali jo ustvarite iz nič
Funkcija "priloži" bo datoteki dodala "FileContent", če ta obstaja, vendar jo bo tudi ustvarila iz nič, če datoteka ne obstaja.
Še zadnja prilagoditev: zamenjajte vsebino spremenljivke LastActiveWindow s trenutno aktivnim oknom.

Vstavi naslov trenutnega aktivnega okna v spremenljivko LastActiveWindow za prihodnje testiranje
Če želite to narediti, mora biti skript sposoben zaznati naslednjo spremembo okna.
LastActiveWindow = %ActiveWindow%
In s tem zadnjim dodatkom je Windows Logger pripravljen! Shranite skript in ga zaženite. Nato preverite datoteko markdown, ta datoteka se bo po 10 sekundah pojavila v mapi datoteke skripta.

Dnevniška datoteka sistema Windows je ustvarjena v istem imeniku kot skript
Prevzemite odgovornost za svoj čas
Dnevniško datoteko lahko odprete s katerim koli urejevalnikom besedil. Vendar pa bo videti bolje, če ga odprete v urejevalniku, združljivem z markdownom. Na posnetku zaslona lahko vidite dnevnik v priljubljenem urejevalniku Typora.

Datoteka za označevanje, ki jo ustvari skript, se naloži v Typora
To je preprost način, da preverite, katere aplikacije uporabljate največ časa, za uporabo pa potrebujete samo orodje, kot je Beležnica.
Če želite nekaj "bolj posebnega", lahko vedno "prilagodite" izhod zapisovalnika, da namesto tega ustvarite datoteko CSV. To je tako preprosto kot prilagoditev spremenljivke FileContent in končnice ustvarjene datoteke. Take datoteke lahko nato uvozite v aplikacije, kot so Excel, Google Calc ali celo sledilnike časa tretjih oseb.
Celoten scenarij
#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