Każdy dzień zaczynasz z najlepszymi intencjami, odmłodzony, gotowy do podjęcia wszystkich zadań. Następnie sprawdzasz godzinę, jest 03:00 i nie możesz się powstrzymać od zastanawiania się, gdzie się podział ten cały czas?

Możesz użyć dedykowanej aplikacji do śledzenia czasu, ale mogą one być irytująco złożone. Plus, gdzie jest w tym zabawa?

Dlaczego nie stworzyć własnej prostej mini-aplikacji, która mogłaby śledzić wszystkie okna, w których spędziłeś czas w ciągu dnia? Będziesz potrzebował tylko AutoHotKey, podstawowego edytora tekstu, takiego jak Notatnik, i około pół godziny. Utknijmy.

Co to jest AutoHotKey?

Głównym celem AutoHotKey jest automatyzacja pulpitu. Jest to język skryptowy, za pomocą którego można wysyłać naciśnięcia klawiszy i ruchy myszy do dowolnego aktywnego okna, tworzyć skróty klawiszowe lub modyfikować naciśnięcia klawiszy. Możesz na przykład użyć go do wyłącz określone klawisze na klawiaturze.

Jest to jednak krótka wersja historii i nie jest tak naprawdę reprezentatywna dla tego, co może zrobić AutoHotKey (w skrócie AHK). To dlatego, że ewoluował od czasu jego początkowej koncepcji i teraz jest kompletnym językiem skryptowym. Możesz myśleć o tym, co możesz z nim zrobić, jako „programowanie Lite”.

instagram viewer

W ten sposób możesz również użyć AHK do tworzenia miniaplikacji, dokładnie tak, jak to, co wyznaczyliśmy jako nasz cel w tym artykule. Pamiętaj, że w tym artykule zagłębimy się w AHK, więc możesz to sprawdzić nasz szybki przewodnik po AutoHotKey dla początkujących zanim zaczniesz.

Tworzenie własnego skryptu do rejestrowania okien za pomocą AutoHotKey

Zanim zaczniemy, powinieneś mieć zainstalowany AHK na swoim komputerze, ponieważ będzie on działał jako "parser" dla twojego skryptu. To „silnik”, który pozwoli „uruchomić” Twój skrypt.

Uwaga: Możesz także skompilować skrypt po jego zakończeniu, aby przekształcić go w rzeczywisty program wykonywalny. Jednak wykracza to poza zakres tego artykułu.

Pobierz AutoHotKey ze swojej oficjalnej strony i zainstaluj.

Uruchom swój ulubiony menedżer plików i odwiedź folder, w którym chcesz przechowywać swój skrypt. Następnie kliknij prawym przyciskiem myszy puste miejsce i wybierz Nowy > Skrypt AutoHotKey.

Kiedy już to zrobisz, nadszedł czas na napisanie właściwego skryptu.

1. Zdefiniuj niezbędne zmienne

Otwórz skrypt w swoim ulubionym edytorze. Możesz użyć czegoś tak prostego, jak Notatnik, który jest dostarczany z systemem Windows, ale będziemy używać Notatnik++ dla tego przewodnika. Ponieważ Notepad++ jest darmowy i lepiej dostosowany do tego celu, warto go wypróbować. Pamiętaj również o sprawdzeniu nasz ostateczny przewodnik po wszystkich skrótach klawiaturowych kiedy to sprawdzasz.

Pamiętaj, że nie powinieneś używać żadnej aplikacji, takiej jak Word czy Dokumenty Google, które mogą wpłynąć na ich formatowanie. Użyj edytora tekstu lub „kodu”.

Skrypt będzie już zawierał kilka podstaw zalecanych pod kątem kompatybilności i wydajności. Zostaw je tak, jak są i rozpocznij pod nimi swój skrypt.

Zacząć od:

AppLogging Rate = 10; Odstęp czasu (w sekundach) między aktywnymi przechwyceniem tytułu okna.
Czas uśpienia := AppLogging Rate * 1000
LogPath = %A_ScriptDir%
Ostatnie okno aktywne =

Zaczynamy od przypisania wartości „10” do AppLoggingRate, której użyjemy do obliczenia czasu między przechwyceniem tytułów okien.

W przypadku użycia z funkcją uśpienia AHK, 1000 jest mniej więcej równe sekundzie. Tak więc, mnożąc ją przez AppLogingRate, zmieniamy zmienną SleepTime na „równą dziesięciu sekundom”.

LogPath to ścieżka, w której chcemy przechowywać nasze logi. Używamy wartości %A_ScriptDir%, co przekłada się na „folder, z którego uruchamiasz skrypt”. Możesz użyć pełnej ścieżki do innego folderu, jeśli chcesz.

Na koniec ustawiliśmy LastActiveWindow na puste. Użyjemy tego później, aby sprawdzić, czy zmieniło się aktywne okno.

2. Monitoruj aktywny system Windows

Ponieważ chcemy stale śledzić, które okno jest aktywne, a jeśli się zmienia, rejestrować jego tytuł i godzinę, będziemy musieli użyć „pętli”.

Jak sama nazwa wskazuje, pętla działa w sposób ciągły, powtarzając te same funkcje. Dzięki prostej składni AHK uważamy, że następujący „kod” jest stosunkowo oczywisty:

Pętla
{
Uśpij %Czas Uśpienia%
Msgbox, to działa!
}

Pętlę definiujemy po prostu wpisując słowo „loop”, a następnie zaznaczając jej początek „{” i koniec „}”. Wszystko w wierszach między „{” i „}” będzie działać bez przerwy, dopóki nie wyjdziesz ze skryptu.

Pętlę rozpoczynamy od oczekiwania (Sleep) przez czas równy zmiennej SleepTime. Ustawiliśmy go jako zmienną w poprzednim rozdziale, aby uprościć kontrolowanie czasu. Zamiast edytować sam skrypt, możesz „powiedzieć” mu za pomocą tej zmiennej, ile sekund ma trwać każda pętla.

Na koniec używamy Message Box do testowania naszego skryptu. Spróbuj go zapisać i uruchomić (kliknij dwukrotnie jego plik). Zobaczysz okno komunikatu z informacją „To działa!” po dziesięciu sekundach.

Kliknij prawym przyciskiem myszy ikonę AHK w zasobniku Windows i wyjdź ze skryptu, gdy masz wystarczająco dużo okien wiadomości. Następnie wróć do edytora i zamień wiersz MsgBox na:

WinGetActiveTitle, ActiveWindow

To jest polecenie do pobrania tytułu aktywnego okna. Zignoruj ​​dodatkowy wiersz „StoreActiveWindow”, którego użyliśmy podczas pisania skryptu do testowania.

3. Uzyskaj aktualny czas i nazwę

Teraz nadchodzi podstawowa część logiki skryptu. Chcemy, aby porównywał nazwę aktywnego okna z poprzednią, a jeśli są różne, "zrób coś". To tak proste, jak następujące:

Jeśli ActiveWindow != %LastActiveWindow%
{
}

Dzięki powyższemu sprawdzamy, czy aktualnie ActiveWindow jest inny (!=) niż wartość przechowywana w zmiennej LastActiveWindow (którą początkowo ustawiliśmy na pustą). Jeśli tak, AHK wykona kod między { a }, które na razie są puste.

Musimy śledzić zarówno datę, jak i godzinę, aby zmierzyć, jak długo okno było aktywne. Każdego dnia będziemy prowadzić różne dzienniki, używając daty w ich nazwie. I chcemy rejestrować nie tylko każdą zmianę okna, ale także gdy stało się. W tym celu przypiszemy różne formaty czasu do zmiennych LogTime i LogFilename, z:

FormatTime, LogTime, HH: mm: ss
FormatCzas, Nazwa pliku dziennika, rrrr-MMM-dd

Dodaj te linie między nawiasami klamrowymi pod "If ActiveWindow...", aby AHK uruchomiło je po wykryciu zmiany okna.

4. Formatowanie danych

Złapaliśmy czas w dwóch różnie sformatowanych zmiennych, a także tytuł aktywnego okna. Jest jednak mały problem: tytuł okna może również zawierać znaki, których nie chcemy. Możemy usunąć wszystkie znaki niealfanumeryczne, korzystając z obsługi AHK dla RegEx, za pomocą:

LogWindow := Regexreplace (ActiveWindow, "[^a-zA-Z0-9]", " ")

Dzięki temu „mówimy” AHK, aby usunęła wszystkie znaki ze zmiennej ActiveWindow, które nie pasują do tego, co jest w nawiasach:

  • Małe litery
  • Wielkie litery
  • Liczby

Następnie przypisujemy wynik do zmiennej LogWindow.

Po ustawieniu wszystkich zmiennych i zebraniu wszystkich cennych danych jesteśmy gotowi do sformatowania naszego pliku dziennika i jego zawartości.

LogFilename = %LogFilename%_AppLog.md
Plik dziennika = %Ścieżka dziennika%\%Nazwa pliku dziennika%

Wcześniej przypisaliśmy bieżącą datę do zmiennej LogFilename. Tak więc w pierwszym wierszu po prostu stwierdzamy, że chcemy dodać "_AppLog.md" do daty, aby użyć go jako nazwy pliku.

W drugim wierszu łączymy zmienną LogPath, którą zdefiniowaliśmy na początku jako miejsce docelowe dla naszych logów, z nazwą pliku. Ich kombinacją jest pełna ścieżka do dziennika, przypisana do zmiennej LogFile.

Przypiszmy odpowiednik „pustego wiersza, Czas — nazwa okna, dwa kolejne puste wiersze, dzielnik i kolejny pusty wiersz, na wszelki wypadek” do zmiennej FileContent.

FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
  • Znaki „`n” informują AHK o wpisaniu nowej linii (odpowiednik jednokrotnego naciśnięcia klawisza Enter).
  • Trzy myślniki pojawią się jako separator, gdy zostaną wyświetlone w przeglądarce zgodnej z przecenami.
  • „%LogTime%” i „%LogWindow%” to zmienne, w których zapisaliśmy nazwę aktywnego okna i czas jego wykrycia.

5. Zaktualizuj plik

Zdefiniowaliśmy, co chcemy zapisać w naszym pliku i znamy jego ścieżkę i nazwę pliku. Pozostaje tylko samo pisanie, które jest tak proste, jak:

Dodaj plik, %Zawartość pliku%, %Plik dziennika%

To prawie tak proste, jak zwykły angielski: dodajemy wszystko w zmiennej „FileContent” do pliku „LogFile”.

Funkcja "append" doda "FileContent" do pliku, jeśli istnieje, ale również utworzy go od podstaw, jeśli tak nie jest.

Ale czekaj, jest jeszcze jedna poprawka: zastąpienie zawartości zmiennej LastActiveWindow aktualnie aktywnym oknem.

Dzięki temu skrypt będzie w stanie wykryć Następny zmiana okna.

LastActiveWindow = %ActiveWindow%

A z tym ostatnim dodatkiem Twój rejestrator okien jest gotowy! Zapisz go i uruchom. Następnie sprawdź plik przecen, który pojawi się w folderze pliku skryptu po dziesięciu sekundach.

Opanuj swój czas

Możesz otworzyć swój plik dziennika za pomocą dowolnego edytora tekstu. Mimo to będzie wyglądał ładniej, jeśli otworzysz go w edytorze zgodnym z przecenami. Na zrzucie ekranu możesz zobaczyć nasz log w popularnym edytorze Typora.

To łatwy sposób na sprawdzenie, na których aplikacjach spędziłeś najwięcej czasu, a do korzystania z niego potrzebujesz tylko czegoś takiego jak Notatnik.

Jeśli chcesz czegoś „więcej”, zawsze możesz „stylizować” dane wyjściowe swojego rejestratora, aby zamiast tego tworzyć pliki CSV. To tak proste, jak dostosowanie zmiennej FileContent i rozszerzenia utworzonego pliku. Możesz następnie zaimportować takie pliki do aplikacji takich jak Excel, Google Calc, a nawet do śledzenia czasu innych firm.

Pełny skrypt:

#NoEnv; Zalecane ze względu na wydajność i zgodność z przyszłymi wydaniami AutoHotkey.
; #Ostrzegać; Włącz ostrzeżenia, aby pomóc w wykrywaniu typowych błędów.
Wejście SendMode; Polecany do nowych skryptów ze względu na doskonałą szybkość i niezawodność.
SetWorkingDir %A_ScriptDir%; Zapewnia spójny katalog początkowy.
; Zmienne
;
AppLogging Rate = 10; Odstęp czasu (w sekundach) między aktywnymi przechwyceniem tytułu okna.
Czas uśpienia := AppLogging Rate * 1000
LogPath = %A_ScriptDir%
Ostatnie okno aktywne =
; Logika
;
Pętla
{
Uśpij %Czas Uśpienia%
WinGetActiveTitle, ActiveWindow
StoreActiveWindow = %ActiveWindow%
Jeśli ActiveWindow != %LastActiveWindow%
{
FormatTime, LogTime, HH: mm: ss
FormatCzas, Nazwa pliku dziennika, rrrr-MM-dd
LogWindow := Regexreplace (ActiveWindow, "[^a-zA-Z0-9]", " ")
LogFilename = %LogFilename%_AppLog.md
Plik dziennika = %Ścieżka dziennika%\%Nazwa pliku dziennika%
FileContent = `n%LogTime% - %LogWindow%`n`n- - -`n
spać 50
Dodaj plik, %Zawartość pliku%, %Plik dziennika%
LastActiveWindow = %ActiveWindow%
}
}
Wyjście
10 fajnych skryptów AutoHotkey (i jak zrobić własne!)

AutoHotkey pozwala tworzyć niestandardowe skróty Windows, makra i wiele więcej! Oto kilka przydatnych skryptów AutoHotkey, które pomogą Ci zacząć.

Czytaj dalej

UdziałĆwierkaćE-mail
Powiązane tematy
  • Okna
  • Wydajność
  • Okna
  • AutoHotkey
  • Zarządzanie czasem
  • Sztuczki produktywności
O autorze
Odysseas Kourafalos (12 opublikowanych artykułów)

Prawdziwe życie OK zaczęło się około 10 lat, kiedy dostał swój pierwszy komputer - Commodore 128. Od tego czasu topi klawisze, pisząc 24/7, próbując rozpowszechniać The Word Of Tech każdemu, kto jest wystarczająco zainteresowany, aby słuchać. A raczej przeczytaj.

Więcej od Odyssea Kourafalosa

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować