Inizi il tuo lavoro ogni giorno presto in modo da poter risolvere tutto durante il giorno. Poi controlli l'orologio e sono le 3 del mattino ma il tuo lavoro non è ancora finito. Allora dov'è finito il tempo?
Puoi utilizzare un'app dedicata per il monitoraggio del tempo, ma può essere complicata e frustrante. Invece, perché non creare la tua piccola e semplice app? Questa applicazione può tenere traccia di tutte le finestre che hai utilizzato durante il giorno. Hai solo bisogno di AutoHotKey, un elaboratore di testi di base come Blocco note e circa mezz'ora. Iniziamo!
Crea il tuo script di registrazione di Windows con AutoHotKey
Prima di iniziare, dovresti installare AHK sul tuo computer perché fungerà da "parser" per lo script. È lo strumento che consentirà al tuo script di "eseguire".
Nota : è anche possibile compilare lo script dopo averlo completato per trasformarlo in un vero programma eseguibile. Tuttavia, ciò va oltre lo scopo di questo articolo.
Scarica AutoHotKey dal sito Web ufficiale e installalo.
Seleziona Nuovo > Script AutoHotKey
Avvia il tuo file manager preferito e accedi alla cartella in cui desideri archiviare lo script. Quindi, fai clic con il pulsante destro del mouse su una posizione vuota e seleziona Nuovo > AutoHotKey Script .
Una volta completato, è il momento di scrivere la sceneggiatura vera e propria.
1. Identificare le variabili necessarie
Apri lo script nel tuo editor preferito. Puoi utilizzare qualcosa di semplice come Blocco note fornito con Windows, ma l'articolo utilizzerà Notepad++ per questo tutorial. Notepad++ è gratuito e più adatto a questo scopo, quindi dovresti provarlo.
Tieni presente che non dovresti utilizzare applicazioni come Word o Google Docs, che potrebbero influire sulla formattazione dello script. Utilizza un editor di testo o di codice.
Lo script conterrà alcune informazioni di base consigliate sulla compatibilità e sulle prestazioni. Lasciali così come sono e avvia lo script seguente.
Inizia con:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Inizia assegnando il valore "10" a AppLoggingRate , che verrà utilizzato per calcolare il tempo tra i tentativi di registrazione della finestra.
Se utilizzato con la funzione Sleep di AHK, 1000 equivale all'incirca a un secondo. Quindi moltiplicandolo per AppLogingRate renderai la variabile SleepTime "pari a 10 secondi".
LogPath è il percorso utilizzato per archiviare i log. L'esempio utilizza il valore %A_ScriptDir% , che si traduce in "la directory da cui esegui lo script". Se lo desideri, puoi utilizzare il percorso completo di un'altra cartella.
Infine, imposta LastActiveWindow su vuoto e utilizzalo in seguito per verificare se la finestra attiva è cambiata.
2. Monitorare le finestre attive
Dato che vogliamo monitorare continuamente quale finestra è attiva e se cambia, registrare titolo e ora, dovremo utilizzare un “loop”.
Come suggerisce il nome, un ciclo viene eseguito continuamente, ripetendo le stesse funzioni. Grazie alla semplice sintassi di AHK, il seguente "codice" è relativamente facile da capire:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Definisci un loop semplicemente digitando la parola "loop" e contrassegnandone l'inizio con "{" e la fine con "}". Tutto nelle righe tra "{" e "}" verrà eseguito per sempre finché non esci dallo script.
Avvia il ciclo aspettando ( Sleep ) per un periodo di tempo pari alla variabile SleepTime. Questa variabile semplifica il controllo del tempo. Invece di modificare tu stesso lo script, puoi "dirgli", tramite questa variabile, quanti secondi dovrebbe durare ogni ciclo.
Infine, utilizza Message Box per testare lo script. Prova a salvarlo ed eseguirlo (fai doppio clic sul file di script). Vedrai una finestra di messaggio che dice "Funziona!" (script funzionante) dopo 10 secondi.
Fai clic con il pulsante destro del mouse sull'icona di AHK nella barra delle applicazioni di Windows ed esci dallo script quando hai abbastanza finestre di messaggio. Quindi torna all'editor e sostituisci la riga MsgBox con:
WinGetActiveTitle, ActiveWindow
Questo è il comando per ottenere il titolo della finestra attiva. Omettere la riga aggiuntiva "StoreActiveWindow" utilizzata nell'esempio durante lo scripting per il test.
Ottieni il titolo della finestra attiva e memorizzalo in una variabile
3. Ottieni l'ora e il nome attuali
Ora arriva il nocciolo della logica dello script. Confronta il nome della finestra attiva con quello precedente e, se differiscono, "fai qualcosa". Tutto è così semplice:
If ActiveWindow != %LastActiveWindow%
{
}
Considerato quanto sopra, controlla se l' ActiveWindow corrente è diverso ( != ) dal valore memorizzato nella variabile LastActiveWindow (che inizialmente era impostata su vuota). In tal caso, AHK eseguirà il codice tra { e } , che attualmente è vuoto.
Imposta la funzione per confrontare il titolo della finestra attiva e della finestra precedente
È necessario tenere traccia sia della data che dell'ora per misurare il tempo di attività di una finestra. Verranno conservati registri diversi per ogni giorno, utilizzando la data nel nome. Verrà registrato non solo ogni cambiamento, ma anche il momento in cui si verifica. Per fare ciò, assegna formati temporali diversi alle variabili LogTime e LogFilename , con:
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Aggiungi quelle linee tra le parentesi graffe in "If ActiveWindow..." , in modo che AHK le esegua quando rileva un cambio di finestra.
Ottieni l'ora corrente e assegnala in due variabili di formati diversi
4. Formato dei dati
Ora catturiamo l'ora in due variabili formattate diversamente, così come il titolo della finestra attiva. C'è però un piccolo problema: il titolo della finestra può contenere anche caratteri indesiderati. È possibile rimuovere tutti i caratteri non alfanumerici utilizzando il supporto di AHK per RegEx, con:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Con questo in mente, "chiediamo" ad AHK di rimuovere tutti i caratteri dalla variabile ActiveWindow che non corrispondono a ciò che è tra parentesi:
- Minuscolo
- Lettera maiuscola
- Numeri
Quindi, assegna il risultato alla variabile LogWindow.
Pulisci il titolo della finestra attiva con RegEx
Con tutte le variabili impostate e tutti i dati preziosi raccolti, ora sei pronto per formattare il file di registro e il suo contenuto.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
In precedenza, abbiamo assegnato la data corrente alla variabile LogFilename. Pertanto, per la prima riga, aggiungi "_AppLog.md" alla data per utilizzarlo come nome del file.
Imposta il nome del file di registro
Nella seconda riga, combina la variabile LogPath , definita all'inizio come destinazione per il file di registro, insieme al nome del file. La loro combinazione è il percorso completo del file di registro, assegnato alla variabile LogFile.
Assegniamo il valore equivalente di "riga vuota, Tempo - Nome della finestra, altre due righe vuote, un divisore e un'altra riga vuota, per buona misura" alla variabile FileContent.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- La lettera "n" indica ad AHK di inserire una nuova riga (equivalente a premere Invio una volta).
- Tre trattini appariranno come separatore quando visualizzati in un visualizzatore compatibile con il cross-down.
- "% LogTime%" e "% LogWindow%" sono variabili che memorizzano il nome della finestra attiva e l'ora in cui è stata rilevata.
Determina il contenuto del file di registro
5. Aggiorna i file
Hai definito cosa vogliamo scrivere nel file, così come il suo percorso e il nome del file. Tutto ciò che rimane è il testo reale e semplice come segue:
FileAppend, %FileContent%, %LogFile%
Aggiungi tutto nella variabile "FileContent" al file "LogFile".
Utilizza la funzione Aggiungi di AHK per aggiornare il file di registro o crearne uno da zero
La funzione "append" aggiungerà "FileContent" al file se esiste, ma lo creerà anche da zero se il file non esiste.
C'è un'ultima modifica: sostituire il contenuto della variabile LastActiveWindow con la finestra attualmente attiva.
Inserisce il titolo della finestra attiva corrente nella variabile LastActiveWindow per test futuri
Per fare ciò, lo script dovrebbe essere in grado di rilevare il successivo cambio di finestra.
LastActiveWindow = %ActiveWindow%
E con quest'ultima aggiunta, il registratore di Windows è pronto! Salva lo script ed eseguilo. Quindi, controlla il file markdown, questo file apparirà nella cartella dei file script dopo 10 secondi.
Il file di registro di Windows viene creato nella stessa directory dello script
Prendi il controllo del tuo tempo
È possibile aprire il file di registro con qualsiasi editor di testo. Tuttavia, avrà un aspetto migliore se lo apri in un editor compatibile con Markdown. Nello screenshot puoi vedere il registro nel popolare editor Typora.
Il file markdown generato dallo script viene caricato in Typora
È un modo semplice per verificare quali app hai utilizzato più tempo e richiede solo uno strumento come Blocco note per essere utilizzato.
Se desideri qualcosa di "più speciale", puoi sempre "modellare" l'output del logger per creare invece un file CSV. È facile come regolare la variabile FileContent e l'estensione del file creato. Puoi quindi importare tali file in applicazioni come Excel, Google Calc o anche tracker temporali di terze parti.
Sceneggiatura completa
#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