Vous commencez votre travail chaque jour tôt afin de pouvoir tout résoudre pendant la journée. Ensuite, vous vérifiez l'horloge et il est 3 heures du matin mais votre travail n'est toujours pas terminé. Alors, où est passé le temps ?
Vous pouvez utiliser une application dédiée au suivi du temps, mais cela peut être compliqué et frustrant. Au lieu de cela, pourquoi ne pas créer votre propre petite application simple ? Cette application peut suivre toutes les fenêtres que vous avez utilisées pendant la journée. Vous avez juste besoin d'AutoHotKey, d'un traitement de texte de base comme le Bloc-notes, et d'environ une demi-heure. Commençons!
Créez votre propre script de journalisation Windows avec AutoHotKey
Avant de commencer, vous devez installer AHK sur votre ordinateur car il agira comme un « analyseur » pour le script. C'est l'outil qui permettra à votre script de "s'exécuter".
Remarque : Vous pouvez également compiler le script une fois terminé pour le transformer en un véritable programme exécutable. Cependant, cela dépasse le cadre de cet article.
Téléchargez AutoHotKey depuis le site officiel et installez-le.
Sélectionnez Nouveau > Script AutoHotKey
Lancez votre gestionnaire de fichiers préféré et accédez au dossier dans lequel vous souhaitez stocker le script. Ensuite, faites un clic droit sur un emplacement vide et sélectionnez Nouveau > AutoHotKey Script .
Une fois terminé, il est temps d'écrire le script proprement dit.
1. Identifiez les variables nécessaires
Ouvrez le script dans votre éditeur préféré. Vous pouvez utiliser quelque chose de simple comme le Bloc-notes fourni avec Windows, mais l'article utilisera Notepad++ pour ce didacticiel. Notepad++ est gratuit et mieux adapté à cet effet, vous devriez donc l'essayer.
Notez que vous ne devez utiliser aucune application telle que Word ou Google Docs, car cela pourrait affecter le formatage du script. Utilisez un éditeur de texte ou de code.
Le script contiendra quelques informations de base recommandées sur la compatibilité et les performances. Laissez-les tels quels et démarrez le script ci-dessous.
Commence avec:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Commencez par attribuer la valeur « 10 » à AppLoggingRate , qui sera utilisée pour calculer le temps entre les tentatives de journalisation des fenêtres.
Lorsqu'il est utilisé avec la fonction Sleep d'AHK, 1000 équivaut à peu près à une seconde. Ainsi, en le multipliant par AppLogingRate , vous rendrez la variable SleepTime "égale à 10 secondes".
LogPath est le chemin utilisé pour stocker les journaux. L'exemple utilise la valeur %A_ScriptDir% , qui se traduit par « le répertoire à partir duquel vous exécutez le script ». Vous pouvez utiliser le chemin complet vers un autre dossier si vous le souhaitez.
Enfin, définissez LastActiveWindow sur vide et utilisez-le plus tard pour vérifier si la fenêtre active a changé.
2. Surveillez les fenêtres actives
Puisque nous voulons surveiller en permanence quelle fenêtre est active et si elle change, enregistrer le titre et l'heure, nous devrons utiliser une « boucle ».
Comme son nom l'indique, une boucle s'exécute en continu, répétant la ou les mêmes fonctions. Grâce à la syntaxe simple d'AHK, le « code » suivant est relativement facile à comprendre :
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Définissez une boucle en tapant simplement le mot "loop", puis en marquant son début par "{" et sa fin par "}". Tout ce qui se trouve entre "{" et "}" s'exécutera indéfiniment jusqu'à ce que vous quittiez le script.
Démarrez la boucle en attendant ( Sleep ) pendant une durée égale à la variable SleepTime. Cette variable simplifie le contrôle du temps. Au lieu d'éditer le script vous-même, vous pouvez lui "indiquer", via cette variable, combien de secondes doit durer chaque boucle.
Enfin, utilisez Message Box pour tester le script. Essayez de l'enregistrer et de l'exécuter (double-cliquez sur le fichier de script). Vous verrez une boîte de message indiquant « Ça marche ! » (le script fonctionne) après 10 secondes.
Cliquez avec le bouton droit sur l'icône d'AHK dans la barre d'état Windows et quittez le script lorsque vous avez suffisamment de boîtes de message. Revenez ensuite dans l'éditeur et remplacez la ligne MsgBox par :
WinGetActiveTitle, ActiveWindow
C'est la commande pour obtenir le titre de la fenêtre active. Omettez la ligne supplémentaire "StoreActiveWindow" que l'exemple a utilisée lors de la création de scripts pour les tests.
Récupère le titre de la fenêtre active et stocke-le dans une variable
3. Obtenez l'heure et le nom actuels
Vient maintenant le cœur de la logique du script. Comparez le nom de la fenêtre active avec le précédent, et s'ils diffèrent, "faites quelque chose". Tout est aussi simple que ceci :
If ActiveWindow != %LastActiveWindow%
{
}
Compte tenu de ce qui précède, vérifiez si l' ActiveWindow actuelle est différente ( != ) de la valeur stockée dans la variable LastActiveWindow (qui était initialement définie sur vide). Si tel est le cas, AHK exécutera le code entre { et } , qui est actuellement vide.
Définissez la fonction pour comparer le titre de la fenêtre active et la fenêtre précédente
Il est nécessaire de suivre à la fois la date et l’heure pour mesurer la disponibilité d’une fenêtre. Des journaux différents pour chaque jour, utilisant la date en leur nom seront conservés. Non seulement chaque changement, mais aussi l’heure à laquelle il se produit sera également enregistré. Pour ce faire, attribuez différents formats d'heure aux variables LogTime et LogFilename , avec :
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Ajoutez ces lignes entre les accolades dans "If ActiveWindow..." , afin qu'AHK les exécute lorsqu'il détecte un changement de fenêtre.
Obtenez l'heure actuelle et attribuez-la à deux variables de formats différents
4. Format des données
Nous capturons maintenant l'heure dans deux variables formatées différemment, ainsi que le titre de la fenêtre active. Il y a cependant un petit problème : le titre de la fenêtre peut également contenir des caractères indésirables. Il est possible de supprimer tous les caractères non alphanumériques en utilisant la prise en charge de RegEx par AHK, avec :
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Dans cet esprit, « demandons » à AHK de supprimer tous les caractères de la variable ActiveWindow qui ne correspondent pas à ce qui est entre parenthèses :
- Minuscule
- Lettre majuscule
- Nombres
Ensuite, affectez le résultat à la variable LogWindow.
Nettoyer le titre de la fenêtre active avec RegEx
Une fois toutes les variables définies et toutes les données précieuses collectées, vous êtes maintenant prêt à formater le fichier journal et son contenu.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Auparavant, nous attribuions la date actuelle à la variable LogFilename. Par conséquent, pour la première ligne, ajoutez "_AppLog.md" à la date pour l'utiliser comme nom de fichier.
Définir le nom du fichier journal
Dans la deuxième ligne, combinez la variable LogPath , définie au début comme destination du fichier journal avec le nom du fichier. Leur combinaison constitue le chemin complet du fichier journal, attribué à la variable LogFile.
Attribuons la valeur équivalente de "ligne vide, Heure - Nom de la fenêtre, deux autres lignes vides, un séparateur et une autre ligne vide, pour faire bonne mesure" à la variable FileContent.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- La lettre « n » indique à AHK de saisir une nouvelle ligne (équivalent à appuyer une fois sur Entrée ).
- Trois tirets apparaîtront comme séparateur lors de l'affichage dans une visionneuse compatible croisée vers le bas.
- "% LogTime%" et "% LogWindow%" sont des variables qui stockent le nom de la fenêtre active et l'heure à laquelle elle a été détectée.
Détermine le contenu du fichier journal
5. Mettre à jour les fichiers
Vous avez défini ce que nous voulons écrire dans le fichier, ainsi que son chemin et son nom de fichier. Il ne reste plus que le texte simple et réel suivant :
FileAppend, %FileContent%, %LogFile%
Ajoutez tout ce qui se trouve dans la variable "FileContent" au fichier "LogFile".
Utilisez la fonction Append d'AHK pour mettre à jour le fichier journal ou en créer un à partir de zéro
La fonction "append" ajoutera "FileContent" au fichier s'il existe, mais le créera également à partir de zéro si le fichier n'existe pas.
Il y a un dernier ajustement : remplacez le contenu de la variable LastActiveWindow par la fenêtre actuellement active.
Insère le titre de la fenêtre active actuelle dans la variable LastActiveWindow pour les tests futurs
Pour ce faire, le script doit être capable de détecter le prochain changement de fenêtre.
LastActiveWindow = %ActiveWindow%
Et avec ce dernier ajout, l'enregistreur Windows est prêt ! Enregistrez le script et exécutez-le. Ensuite, vérifiez le fichier markdown, ce fichier apparaîtra dans le dossier du fichier script après 10 secondes.
Le fichier journal Windows est créé dans le même répertoire que le script
Prenez le contrôle de votre temps
Vous pouvez ouvrir le fichier journal avec n'importe quel éditeur de texte. Cependant, il sera meilleur si vous l'ouvrez dans un éditeur compatible avec Markdown. Dans la capture d'écran, vous pouvez voir le journal dans l'éditeur Typora populaire.
Le fichier markdown généré par le script est chargé dans Typora
C'est un moyen simple de vérifier quelles applications vous utilisez le plus de temps et son utilisation ne nécessite qu'un outil tel que le Bloc-notes.
Si vous voulez quelque chose de « plus spécial », vous pouvez toujours « styliser » la sortie de l'enregistreur pour créer un fichier CSV à la place. C'est aussi simple que d'ajuster la variable FileContent et l'extension du fichier créé. Vous pouvez ensuite importer ces fichiers dans des applications comme Excel, Google Calc ou même des outils de suivi du temps tiers.
Scénario complet
#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