Вы начинаете каждый день с лучшими намерениями, помолодев, готовы взяться за все свои задачи. Затем вы проверяете время, это 03:00 утра, и вы не можете не задаться вопросом, куда пропало все время?
Вы можете использовать специальное приложение для отслеживания времени, но оно может быть раздражающе сложным. Плюс, где в этом веселье?
Почему бы вместо этого не создать собственное простое мини-приложение, которое могло бы отслеживать все окна, в которых вы проводите время в течение дня? Вам понадобится всего лишь AutoHotKey, базовый текстовый процессор, такой как Блокнот, и около получаса. Давай застрянем.
Что такое AutoHotKey?
Основная цель AutoHotKey - автоматизация рабочего стола. Это язык сценариев, с помощью которого вы можете отправлять нажатия клавиш и движения мыши в любое активное окно, создавать горячие клавиши или изменять нажатия клавиш. Вы можете, например, использовать его для отключить определенные клавиши на клавиатуре.
Однако это краткая версия истории, которая не совсем отражает то, что может делать AutoHotKey (сокращенно AHK). Это потому, что он развивался с момента его первоначальной концепции и теперь представляет собой законченный язык сценариев. Вы можете думать о том, что вы можете с ним делать, как о «облегченном программировании».
Таким образом, вы также можете использовать AHK для создания мини-приложений, точно таких же, как мы поставили перед собой цель в этой статье. Обратите внимание, что в этой статье мы погрузимся прямо в AHK, так что вы можете проверить наше краткое руководство по AutoHotKey для начинающих прежде, чем вы начнете.
Создание собственного скрипта регистрации окон с помощью AutoHotKey
Перед тем, как мы начнем, у вас должен быть установлен AHK на вашем компьютере, поскольку он будет действовать как «синтаксический анализатор» для вашего скрипта. Это «движок», который позволит вашему скрипту «работать».
Примечание. Вы также можете скомпилировать свой скрипт после того, как он будет готов, чтобы превратить его в действительную исполняемую программу. Однако это выходит за рамки данной статьи.
Скачать AutoHotKey со своего официального сайта и установите его.
Запустите ваш любимый файловый менеджер и посетите папку, в которой вы хотите сохранить свой скрипт. Затем щелкните правой кнопкой мыши пустое место и выберите Создать> Скрипт AutoHotKey.
Как только это будет сделано, пора написать настоящий сценарий.
1. Определите необходимые переменные
Откройте скрипт в вашем любимом редакторе. Вы можете использовать что-нибудь такое же простое, как Блокнот, которое поставляется с Windows, но мы будем использовать Блокнот ++ для этого руководства. Поскольку Notepad ++ бесплатен и лучше приспособлен для этой цели, стоит попробовать его. Не забудьте также проверить наше полное руководство по всем сочетаниям клавиш пока вы это проверяете.
Обратите внимание, что вам не следует использовать какие-либо приложения, такие как Word или Google Docs, которые могут повлиять на его форматирование. Используйте текстовый или «кодовый» редактор.
Сценарий уже будет содержать некоторые основы, рекомендуемые для совместимости и производительности. Оставьте их как есть и запустите свой сценарий под ними.
Начнем с:
AppLoggingRate = 10; Интервал времени (в секундах) между захватами заголовков активного окна.
SleepTime: = AppLoggingRate * 1000
LogPath =% A_ScriptDir%
LastActiveWindow =
Мы начинаем с присвоения AppLoggingRate значения «10», которое мы будем использовать для расчета времени между захватом заголовков окон.
При использовании с функцией сна AHK 1000 примерно равно секунде. Итак, умножая его на AppLogingRate, мы делаем переменную SleepTime «равной десяти секундам».
LogPath - это путь, по которому мы хотим хранить наши журналы. Мы используем значение% A_ScriptDir%, что переводится как «папка, из которой вы запускаете скрипт». Вы можете использовать полный путь к другой папке, если хотите.
Наконец, мы устанавливаем LastActiveWindow пустым. Мы будем использовать это позже, чтобы проверить, изменилось ли активное окно.
2. Мониторинг активных окон
Поскольку мы хотим постоянно отслеживать, какое окно активно, и если оно изменяется, записывать его заголовок и время, нам придется использовать «цикл».
Как указано в названии, цикл выполняется непрерывно, повторяя одни и те же функции. Благодаря простому синтаксису AHK, мы считаем, что следующий «код» относительно не требует пояснений:
Петля
{
Сон% Время сна%
Msgbox, это работает!
}
Мы определяем цикл, просто набирая слово «цикл», а затем отмечая его начало знаком «{» и конец знаком «}». Все, что находится в строках между "{" и "}", будет выполняться постоянно, пока вы не выйдете из скрипта.
Мы начинаем цикл с ожидания (сна) в течение времени, равного переменной SleepTime. Мы установили его как переменную в предыдущей главе, чтобы упростить управление временем. Вместо того, чтобы редактировать сам скрипт, вы можете «сказать» ему через эту переменную, сколько секунд должен длиться каждый цикл.
Наконец, мы используем окно сообщения для тестирования нашего скрипта. Попробуйте сохранить и запустить его (дважды щелкните его файл). Вы увидите окно с сообщением «Это работает!» через десять секунд.
Щелкните правой кнопкой мыши значок AHK на панели задач Windows и выйдите из сценария, когда у вас будет достаточно окон с сообщениями. Затем вернитесь в свой редактор и замените строку MsgBox на:
WinGetActiveTitle, ActiveWindow
Это команда для получения заголовка активного окна. Не обращайте внимания на лишнюю строку StoreActiveWindow, которую мы использовали при написании скрипта для тестирования.
3. Получить текущее время и имя
Теперь перейдем к основной части логики скрипта. Мы хотим, чтобы он сравнивал имя активного окна с предыдущим, и, если они разные, «делай что-нибудь». Это очень просто:
Если ActiveWindow! =% LastActiveWindow%
{
}
С помощью вышесказанного мы проверяем, отличается ли текущий ActiveWindow (! =) От значения, хранящегося в переменной LastActiveWindow (которую мы изначально установили как пустую). Если это так, AHK выполнит код между {и}, которые пока пусты.
Нам нужно отслеживать дату и время, чтобы измерить, как долго окно было активным. Мы будем вести разные журналы на каждый день, используя дату в их имени. И мы хотим регистрировать не только каждое изменение окна, но и когда это случилось. Для этого мы назначим переменным LogTime и LogFilename разные форматы времени с помощью:
FormatTime, LogTime,, ЧЧ: мм: сс
FormatTime, LogFilename,, гггг-МММ-дд
Добавьте эти строки между фигурными скобками в разделе «Если ActiveWindow ...», чтобы AHK запускал их при обнаружении изменения окна.
4. Форматирование данных
Мы получили время в двух переменных с различным форматом, а также заголовок активного окна. Однако есть небольшая проблема: заголовок окна может также содержать символы, которые нам не нужны. Мы можем удалить все не буквенно-цифровые символы, используя поддержку AHK для RegEx, с помощью:
LogWindow: = Regexreplace (ActiveWindow, "[^ a-zA-Z0-9]", "")
Таким образом, мы «говорим» AHK удалить все символы из переменной ActiveWindow, которые не соответствуют тому, что указано в скобках:
- Строчные буквы
- Заглавные буквы
- Числа
Затем мы присваиваем результат переменной LogWindow.
Установив все переменные и собрав все ценные данные, мы готовы отформатировать наш файл журнала и его содержимое.
LogFilename =% LogFilename% _AppLog.md
LogFile =% LogPath% \% LogFilename%
Ранее мы присвоили текущую дату переменной LogFilename. Таким образом, в первой строке мы просто заявляем, что хотим добавить «_AppLog.md» к дате, чтобы использовать ее в качестве имени файла.
Во второй строке мы объединяем переменную LogPath, которую мы определили в начале как место назначения для наших журналов, с именем файла. Их комбинация - это полный путь к журналу, присвоенный переменной LogFile.
Давайте назначим эквивалент «пустая строка, время - имя окна, еще две пустые строки, разделитель и еще одна пустая строка» для переменной FileContent.
FileContent = `n% LogTime% -% LogWindow%` n`n- - -`n
- Буквы «n» говорят AHK ввести новую строку (эквивалент однократного нажатия Enter).
- Три черточки будут отображаться как разделитель, когда они представлены в программе просмотра, совместимой с markdown.
- «% LogTime%» и «% LogWindow%» - это переменные, в которых мы сохранили имя активного окна и время его обнаружения.
5. Обновите файл
Мы определили, что хотим записать в наш файл, и знаем его путь и имя файла. Все, что остается, - это собственно написание, что очень просто:
FileAppend,% FileContent%,% LogFile%
Это почти так же просто, как на простом английском: мы добавляем все, что есть в переменной «FileContent», к файлу «LogFile».
Функция «append» добавит «FileContent» в файл, если он существует, но также создаст его с нуля, если это не так.
Но подождите, есть еще одна хитрость: замена содержимого переменной LastActiveWindow текущим активным окном.
Благодаря этому скрипт сможет обнаружить следующий изменение окна.
LastActiveWindow =% ActiveWindow%
И с этим последним дополнением ваш оконный регистратор готов! Сохраните и запустите. Затем проверьте файл уценки, который появится в папке с файлом сценария через десять секунд.
Управляйте своим временем
Вы можете открыть файл журнала в любом текстовом редакторе. Тем не менее, он будет выглядеть красивее, если вы откроете его в редакторе, совместимом с markdown. На скриншоте вы можете увидеть наш журнал в популярном редакторе Typora.
Это простой способ проверить, в каких приложениях вы потратили больше всего времени, и для его использования вам понадобится только что-то вроде Блокнота.
Если вам нужно что-то «больше», вы всегда можете «стилизовать» вывод вашего регистратора для создания файлов CSV. Это так же просто, как настроить переменную FileContent и расширение создаваемого файла. Затем вы можете импортировать такие файлы в приложения, такие как Excel, Google Calc, или даже в сторонние устройства отслеживания времени.
Полный сценарий:
#NoEnv; Рекомендуется для производительности и совместимости с будущими выпусками AutoHotkey.
; #Предупреждать; Включите предупреждения, чтобы помочь в обнаружении распространенных ошибок.
SendMode Input; Рекомендуется для новых скриптов из-за его превосходной скорости и надежности.
SetWorkingDir% A_ScriptDir%; Обеспечивает постоянный начальный каталог.
; Переменные
;
AppLoggingRate = 10; Интервал времени (в секундах) между захватами заголовков активного окна.
SleepTime: = AppLoggingRate * 1000
LogPath =% A_ScriptDir%
LastActiveWindow =
; Логика
;
Петля
{
Сон% Время сна%
WinGetActiveTitle, ActiveWindow
StoreActiveWindow =% ActiveWindow%
Если ActiveWindow! =% LastActiveWindow%
{
FormatTime, LogTime,, ЧЧ: мм: сс
FormatTime, LogFilename,, гггг-ММ-дд
LogWindow: = Regexreplace (ActiveWindow, "[^ a-zA-Z0-9]", "")
LogFilename =% LogFilename% _AppLog.md
LogFile =% LogPath% \% LogFilename%
FileContent = `n% LogTime% -% LogWindow%` n`n- - -`n
спать 50
FileAppend,% FileContent%,% LogFile%
LastActiveWindow =% ActiveWindow%
}
}
Выход
AutoHotkey позволяет создавать собственные ярлыки Windows, макросы и многое другое! Вот несколько полезных сценариев AutoHotkey, которые помогут вам начать работу.
Читать далее
- Окна
- Продуктивность
- Окна
- AutoHotkey
- Тайм-менеджмент
- Уловки продуктивности
Настоящая жизнь OK началась примерно в 10 лет, когда он получил свой первый компьютер - Commodore 128. С тех пор он плавит клавиши, печатая круглосуточно, без выходных, пытаясь распространить «Слово о технике» среди всех, кто достаточно заинтересован, чтобы его слушать. Вернее, прочтите.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться