Вы начинаете работу каждый день рано, чтобы успеть решить все в течение дня. Затем вы смотрите на часы и видите, что сейчас 3 часа ночи, но ваша работа еще не закончена. Так куда же ушло время?
Вы можете использовать специальное приложение для отслеживания времени, но это может быть сложно и утомительно. Вместо этого, почему бы не создать собственное простое маленькое приложение? Это приложение может отслеживать все окна, которые вы использовали в течение дня. Вам просто понадобится AutoHotKey, базовый текстовый процессор, такой как Блокнот, и около получаса. Давайте начнем!
Создайте свой собственный сценарий ведения журнала Windows с помощью AutoHotKey.
Перед началом вам следует установить AHK на свой компьютер, поскольку он будет выполнять роль «парсера» сценария. Это инструмент, который позволит вашему скрипту «запуститься».
Примечание . Вы также можете скомпилировать сценарий после завершения, чтобы превратить его в настоящую исполняемую программу. Однако это выходит за рамки данной статьи.
Загрузите AutoHotKey с официального сайта и установите его.
Выберите «Создать» > «Скрипт AutoHotKey».
Запустите свой любимый файловый менеджер и получите доступ к папке, в которой вы хотите сохранить скрипт. Затем щелкните правой кнопкой мыши пустое место и выберите « Создать» > «Скрипт AutoHotKey» .
После завершения пришло время написать настоящий сценарий.
1. Определите необходимые переменные
Откройте скрипт в вашем любимом редакторе. Вы можете использовать что-нибудь простое, например Блокнот, входящий в состав Windows, но в статье для этого руководства будет использоваться Notepad++ . Notepad++ бесплатен и лучше приспособлен для этой цели, поэтому вам стоит его попробовать.
Обратите внимание, что вам не следует использовать какие-либо приложения, такие как Word или Google Docs, которые могут повлиять на форматирование сценария. Используйте текстовый редактор или редактор кода.
Сценарий будет содержать некоторую базовую рекомендуемую информацию о совместимости и производительности. Оставьте их как есть и запустите скрипт ниже.
Начинается с:
AppLoggingRate = 10 ; Time interval (in seconds) between active window title captures.
SleepTime := AppLoggingRate * 1000
LogPath = %A_ScriptDir%
LastActiveWindow =
Начните с присвоения значения «10» AppLoggingRate , которое будет использоваться для расчета времени между попытками регистрации окна .
При использовании с функцией сна AHK 1000 примерно равно одной секунде. Таким образом, умножив его на AppLogingRate , вы сделаете переменную SleepTime «равной 10 секундам».
LogPath — это путь, используемый для хранения журналов. В примере используется значение %A_ScriptDir% , которое переводится как «каталог, из которого вы запускаете скрипт». Если хотите, вы можете использовать полный путь к другой папке.
Наконец, установите LastActiveWindow пустым и используйте его позже, чтобы проверить, изменилось ли активное окно.
2. Мониторинг активных окон
Поскольку мы хотим постоянно отслеживать, какое окно активно, и в случае его изменения записывать заголовок и время, нам придется использовать «цикл».
Как следует из названия, цикл выполняется непрерывно, повторяя одну и ту же функцию(и). Благодаря простому синтаксису AHK следующий «код» относительно легко понять:
Loop
{
Sleep %SleepTime%
Msgbox, It Works!
}
Определите цикл, просто набрав слово «loop», а затем отметив его начало «{» и окончание «}». Все, что находится в строках между «{» и «}», будет выполняться вечно, пока вы не выйдете из сценария.
Запустите цикл, ожидая ( Sleep ) в течение времени, равного переменной SleepTime. Эта переменная упрощает контроль времени. Вместо того, чтобы редактировать скрипт самостоятельно, вы можете «сообщить» ему через эту переменную, сколько секунд должен длиться каждый цикл.
Наконец, используйте окно сообщений для проверки сценария. Попробуйте сохранить и запустить его (дважды щелкните файл сценария). Вы увидите окно сообщения с надписью «Это работает!» (скрипт работает) через 10 секунд.
Щелкните правой кнопкой мыши значок AHK на панели задач Windows и выйдите из сценария, когда у вас будет достаточно окон сообщений. Затем вернитесь в редактор и замените строку MsgBox на:
WinGetActiveTitle, ActiveWindow
Это команда для получения заголовка активного окна. Опустите лишнюю строку StoreActiveWindow , которая использовалась в примере при написании сценария для тестирования.
Получите заголовок активного окна и сохраните его в переменной.
3. Получить текущее время и имя
Теперь поговорим о сути логики сценария. Сравните имя активного окна с предыдущим и, если они отличаются, «сделайте что-нибудь». Все так просто:
If ActiveWindow != %LastActiveWindow%
{
}
Учитывая вышеизложенное, проверьте, отличается ли текущий ActiveWindow ( != ) от значения, хранящегося в переменной LastActiveWindow (которая изначально была установлена пустой). Если это так, AHK выполнит код между { и } , который в настоящее время пуст.
Установите функцию для сравнения заголовка активного окна и предыдущего окна.
Чтобы измерить время безотказной работы окна, необходимо отслеживать дату и время. Будут сохранены разные журналы за каждый день, в названии которых указана дата. Также будет записано не только каждое изменение, но и время, когда оно произошло. Для этого присвойте переменным LogTime и LogFilename разные форматы времени :
FormatTime, LogTime,, HH:mm:ss
FormatTime, LogFilename,, yyyy-MMM-dd
Добавьте эти строки между фигурными скобками в «If ActiveWindow...» , чтобы AHK запускал их при обнаружении изменения окна.
Получите текущее время и присвойте его двум переменным разных форматов.
4. Формат данных
Теперь мы фиксируем время в двух переменных разного формата, а также заголовок активного окна. Однако есть небольшая проблема: заголовок окна также может содержать нежелательные символы. Можно удалить все небуквенно-цифровые символы, используя поддержку AHK для RegEx, с помощью:
LogWindow := Regexreplace(ActiveWindow, "[^a-zA-Z0-9]", " ")
Имея это в виду, давайте «попросим» AHK удалить из переменной ActiveWindow все символы, которые не соответствуют тем, что указаны в скобках:
- строчные буквы
- Прописная буква
- Числа
Затем присвойте результат переменной LogWindow.
Очистите заголовок активного окна с помощью RegEx.
Теперь, когда все заданы переменные и собраны все ценные данные, вы готовы отформатировать файл журнала и его содержимое.
LogFilename = %LogFilename%_AppLog.md
LogFile = %LogPath%\%LogFilename%
Ранее мы присвоили текущую дату переменной LogFilename. Поэтому в первой строке добавьте к дате «_AppLog.md» , чтобы использовать ее в качестве имени файла.
Установите имя файла журнала
Во второй строке объедините переменную LogPath , определенную вначале как место назначения файла журнала, с именем файла. Их комбинация представляет собой полный путь к файлу журнала, присвоенный переменной LogFile.
Давайте присвоим эквивалентное значение «пустая строка, время — имя окна, еще две пустые строки, разделитель и еще одна пустая строка, для наглядности» переменной FileContent.
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
- Буква «n» указывает AHK ввести новую строку (эквивалентно однократному нажатии Enter ).
- Три тире будут отображаться в качестве разделителя при отображении в средстве просмотра, совместимом с перекрестным расположением элементов.
- «% LogTime%» и «% LogWindow%» — это переменные, в которых хранится имя активного окна и время его обнаружения.
Определяет содержимое файла журнала
5. Обновить файлы
Вы определили, что мы хотим записать в файл, а также его путь и имя файла. Все, что остается, это фактический простой текст следующего содержания:
FileAppend, %FileContent%, %LogFile%
Добавьте все, что есть в переменной FileContent, в файл LogFile.
Используйте функцию добавления AHK, чтобы обновить файл журнала или создать его с нуля.
Функция «append» добавит «FileContent» к файлу, если он существует, но также создаст его с нуля, если файл не существует.
Есть еще одна последняя настройка: замените содержимое переменной LastActiveWindow на активное в данный момент окно.
Вставляет заголовок текущего активного окна в переменную LastActiveWindow для будущего тестирования.
Для этого сценарий должен иметь возможность обнаружить следующее изменение окна.
LastActiveWindow = %ActiveWindow%
И с этим последним дополнением программа регистрации Windows готова! Сохраните скрипт и запустите его. Затем проверьте файл уценки, этот файл появится в папке файла сценария через 10 секунд.
Файл журнала Windows создается в том же каталоге, что и скрипт.
Возьмите под контроль свое время
Вы можете открыть файл журнала в любом текстовом редакторе. Однако он будет выглядеть лучше, если вы откроете его в редакторе, совместимом с уценкой. На скриншоте вы можете увидеть лог популярного редактора Typora.
Файл уценки, созданный сценарием, загружается в Typora.
Это простой способ проверить, какие приложения вы используете больше всего времени, и для его использования требуется только такой инструмент, как «Блокнот».
Если вам нужно что-то «более особенное», вы всегда можете «стилизовать» вывод регистратора, чтобы вместо этого создать файл CSV. Это так же просто, как настроить переменную FileContent и расширение созданного файла. Затем вы можете импортировать такие файлы в такие приложения, как Excel, Google Calc или даже в сторонние программы отслеживания времени.
Полный сценарий
#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