sobota, 29 listopada 2014

AutoHotKey

W życiu każdego, kto spędza większość dnia roboczego przed ekranem, przychodzi w końcu taka chwila, kiedy trzeba sobie powiedzieć w duchu: „Rany, jestem przystawką do komputera”. Zwłaszcza, gdy po raz 752 w ciągu godziny musimy wpisać to samo albo wykonać tę samą sekwencję kliknięć w tych samych miejscach, i tak do znudzenia. Właśnie po to przecież wymyślono maszyny, a w szczególności komputery, żebyśmy nie musieli zawracać sobie głowy głupotami i mogli się skupić na tym, co naprawdę istotne.

No właśnie, problem jednak w tym, że komputer sam nic za nas nie wymyśli, najpierw trzeba mu pokazać, co ma zrobić. Tylko nie zawsze wiadomo, jak się za to zabrać. Dlatego dzisiaj przedstawię program, który umożliwia automatyzację często powtarzanych czynności w systemie operacyjnym Windows.

Program nazywa się AutoHotKey i dostępny jest za darmo, zarówno do użytku prywatnego, jak i komercyjnego. Można go pobrać ze strony http://www.autohotkey.com/

Do czego mi to?

Program AutoHotKey (dalej AHK) nadaje się do wielu zastosowań, ale najistotniejsze funkcje to:
* zamiana ciągów znaków wpisanych z klawiatury na inne ciągi znaków (tzw. HotString),
* podpisywanie akcji pod dowolne skróty klawiszowe (tzw. KeyBinds) – akcje mogą obejmować m.in.: przesuwanie kursora w zadane miejsce, symulowanie kliknięć myszą i wciśnięć klawiszy, uruchamianie programów i wiele więcej.

Zaczynamy

Po zainstalowaniu i uruchomieniu programu należy jeszcze zdefiniować nasze akcje i hotstringi. W tym celu trzeba napisać skrypt – np. w Notatniku Windows – i zapisać go w łatwo dostępnym miejscu pod dowolną nazwą z rozszerzeniem AHK. Po dwukrotnym kliknięciu ikony skryptu w zasobniku obok zegarka pojawi się zielona ikonka z literą „H”, co oznacza, że nasz skrypt działa i możemy już z niego korzystać.

No dobrze, pytanie tylko, co napisać i w ogóle jak to działa. Już wyjaśniam.

HotString

Wyobraźmy sobie, że codziennie wysyłamy 10, 20 albo i 50 wiadomości e-mail, które zawsze zaczynamy standardowym powitaniem, np.: „Dzień dobry” potem przecinek, dwa entery i potem dopiero wpisujemy treść wiadomości. A gdyby tak zamiast tego powitania, przecinka i dwóch enterów można było po prostu wpisać dwie litery i wcisnąć Enter? Nic prostszego:

1. Otwórz Notatnik Windows lub inny ulubiony program do edycji plików tekstowych.

2. W oknie programu wklej poniższy tekst:

::qq::
SendInput Dzień dobry,{enter}{enter}
return

3. Zapisz plik z rozszerzeniem .ahk i zamknij Notatnik.

4. Dwukrotnie kliknij ikonę zapisanego pliku – w zasobniku systemowym obok zegarka powinna pojawić się zielona ikonka z literą „H”, co oznacza, że skrypt działa i można z niego korzystać. Sprawdźmy:

5. Otwórz okno dowolnego edytora tekstu i wpisz qq, a następnie wciśnij klawisz Enter. Jeżeli wszystko poszło zgodnie z planem, litery qq powinny zniknąć, a w ich miejsce powinien pojawić się tekst powitania z przecinkiem, poniżej pusta linia, zaś kursor powinien migać pod pustą linią.

Gratulacje! Właśnie udało Ci się napisać pierwszy działający skrypt AHK! Od dzisiaj coraz rzadziej będziesz myśleć, że jesteś przystawką do komputera. Spróbuj teraz samodzielnie napisać własne hotstringi.

Aby ułatwić Ci to zadanie, wyjaśnię po kolei, jak to wszystko działa:

0. Aby napisać kolejny hotstring nie musisz tworzyć nowego pliku – możesz otworzyć poprzedni plik ahk, wstawić na końcu kilka pustych linii i wpisać nową procedurę. Po zapisaniu pliku wystarczy, że prawym klawiszem klikniesz w zasobniku systemowym zieloną ikonę z literą „H” i z menu kontekstowego wybierzesz opcję „Reload This Script”.

1. Pierwsza linia: w pierwszej linii wpisujemy na początku dwa dwukropki, potem ciąg znaków, który chcemy automatycznie zamieniać na inny ciąg i kończymy znów dwoma dwukropkami. Wyobraźmy sobie np., że codziennie po 100 razy musimy wpisywać bardzo długą i nieodmienną przez przypadki nazwę firmy, np. „Livingstone SuperDots HeartQuarters Entertainment Ltd.”, wpisujemy, co i rusz się nam coś myli, wracamy, poprawiamy, znowu źle, znów wracamy i poprawiamy i w końcu szlag jasny nas trafia. Skorzystajmy z AHK. Zamiast wpisywać 55 liter będziemy wpisywać 4, np. lshe. Zatem w pierwszej linii nowej procedury wpiszmy:

::lshe::

2. Druga linia: teraz pora powiedzieć AHK, na co chcemy zamienić ciąg znaków lshe z pierwszej linii, a chcemy go zamienić na „Livingstone SuperDots HeartQuarters Entertainment Ltd.”, tak więc wpisujemy:

SendInput Livingstone SuperDots HeartQuarters Entertainment Ltd.

3. Trzecia linia: informujemy AHK, że to koniec procedury, więc wpisujemy:

return

4. Cały przykładowy skrypt:

::lshe::
SendInput Livingstone SuperDots HeartQuarters Entertainment Ltd.
return

5. Gotowe! Teraz wystarczy zapisać plik, prawym klawiszem kliknąć w zasobniku systemowym zieloną ikonę z literą „H” i z menu kontekstowego wybrać opcję „Reload This Script”.

6. Jeżeli wszystko poszło zgodnie z planem, to w dowolnym oknie po wpisaniu tekstu lshe i wciśnięciu Enter litery lshe powinny zniknąć, a w ich miejsce powinien pojawić się napis: „Livingstone SuperDots HeartQuarters Entertainment Ltd.”. U mnie działa.

W ten sam sposób możesz podpisać do skrótów inne często wpisywane teksty, np. pozdrowienia na koniec maila (Z poważaniem,{enter}Marcin Kowalski) lub standardowe formułki („W załączeniu przesyłam Państwu”, „Bardzo proszę o potwierdzenie odbioru plików” itp.).

Jedna uwaga: Dwa dwukropki na początku pierwszej linii oznaczają, że ciąg znaków (w naszym przykładzie lshe) zostanie zamieniony na inny (ten z drugiej linii za SendInput) tylko wtedy, gdy po wpisaniu wciśniesz Enter, Spację, Tab lub inny klawisz kończący słowo, np. kropkę. Aby zamieniać ciągi „na żywo” – co jest czasem przydatne – wpisz na początku linii :*: (dwukropek gwiazdka dwukropek).

KeyBind

AHK pozwala podpisać własne akcje pod dowolnie zdefiniowane klawisze skrótów. Zobaczmy jak to działa.

Wyobraźmy sobie, że 30 razy dziennie musisz włączyć Kalkulator, aby dodać i pomnożyć to i tamto. Pierwsze wyjście: przypnij Kalkulator na pasku i klikaj go, za każdym razem, gdy będzie potrzebny. Drugie wyjście: skorzystaj ze skrótów AHK:

0. Otwórz domyślny plik ze skryptami AHK i wstaw na końcu kilka pustych linii.

1. Następnie wpisz:

#k::
run calc.exe
return

2. Zapisz plik, a następnie prawym klawiszem kliknij w zasobniku systemowym zieloną ikonę z literą „H” i z menu kontekstowego wybierz opcję „Reload This Script”.

3. Od teraz wystarczy wcisnąć klawisz Win (ten z okienkiem) + K, aby włączyć Kalkulator, bowiem znak # odpowiada klawiszowi Win.

Klawisze do skrótów:
# – Win
! – Alt
^ – Control
+ – Shift

Po znaku skrótu wpisujemy literę, z którą dany skrót ma działać, a całość kończymy dwoma dwukropkami. Klawisze skrótu w procedurach można dowolnie łączyć, np.:

#^v:: – Win+Ctr+V
+!s:: – Shift+Alt+S

Jedna uwaga: Przed zdefiniowaniem klawiszy skrótów sprawdź, czy nie kolidują one z innymi skrótami.

Na koniec kilka przydatnych skryptów

Od razu zaznaczam, że nie jestem autorem wszystkich prezentowanych skryptów, niektóre z nich tylko lekko podrasowałem.

1. Szukanie zaznaczonego tekstu w Google (wciśnij ctrl+G):

^g::
  prevClipboard := ClipboardAll
  SendInput, ^c
  Sleep, 100
  ClipWait, 1
  if !(ErrorLevel)  {
    Clipboard := RegExReplace(RegExReplace(Clipboard, "\r?\n"," "), "(^\s+|\s+$)")
    If SubStr(ClipBoard,1,7)="http://"
      Run, % Clipboard
    else
      Run, % "http://www.google.com/search?hl=en&q=" Clipboard
  }
  Clipboard := prevClipboard
return

2. Wpisywanie bieżącej daty po polsku (wpisz d[\):

:*:d[\::
FormatTime, CurrentDateTime,, d M yyyy ; It will look like 9/1/2005 3:53 PM
StringSplit, word_array, CurrentDateTime, %A_Space%
if (word_array2 = 1){
mes=stycznia
}
if (word_array2 = 2){
mes=lutego
}
if (word_array2 = 3){
mes=marca
}
if (word_array2 = 4){
mes=kwietnia
}
if (word_array2 = 5){
mes=maja
}
if (word_array2 = 6){
mes=czerwca
}
if (word_array2 = 7){
mes=lipca
}
if (word_array2 = 8){
mes=sierpnia
}
if (word_array2 = 9){
mes=września
}
if (word_array2 = 10){
mes=października
}
if (word_array2 = 11){
mes=listopada
}
if (word_array2 = 12){
mes=grudnia
}
SendInput %word_array1% %mes% %word_array3%
return

3. Wpisywanie bieżącej daty w formacie akceptowanym przez program Excel (wpisz d[[):

:*:d[[::
FormatTime, CurrentDateTime,, yy-MM-dd
SendInput %CurrentDateTime%
return

4. Wklejanie tekstu bez formatowania (wciśnij klawisz Win przy wklejaniu):

#^v::
Clipboard=%Clipboard%
Sleep, 100
Send ^v
return

5. Włączanie i wyłączanie właściwości Zawsze na wierzchu (Always On Top) dla dowolnego aktywnego okna (wciśnij Win+Ctr+A):

#^a::
WinGet, currentWindow, ID, A
WinGet, ExStyle, ExStyle, ahk_id %currentWindow%
if (ExStyle & 0x8)  ; 0x8 is WS_EX_TOPMOST.
{
   Winset, AlwaysOnTop, off, ahk_id %currentWindow%
   SplashImage,, x0 y0 b fs12, OFF always on top.
   Sleep, 1500
   SplashImage, Off
}
else
{
   WinSet, AlwaysOnTop, on, ahk_id %currentWindow%
   SplashImage,,x0 y0 b fs12, ON always on top.
   Sleep, 1500
   SplashImage, Off
}
return

TurnOffSI:
SplashImage, off
SetTimer, TurnOffSI, 1000, Off
Return

6. I na dobranoc – uśpij komputer (wciśnij Win+Alt+S):

#!s UP::DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0) ;suspend (sleep)

1 komentarz: