Kurs wstępny

13 marca 2012
1 gwiadka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek

Strona główna | Skróty klawiszowe | Często zadawane pytania

Podstawy obsługi programu AutoHotkey — skróty klawiszowe

Materiał tego kursu obejmuje tworzenie makr i skrótów klawiszowych.

Spis treści

Tworzenie skryptu

Skrypt jest plikiem tekstowym zawierającym zestaw poleceń do wykonania przez program (AutoHotkey.exe). Skrypt może zawierać skróty klawiszowe i skróty łańcuchowe, a nawet w całości się z nich składać. Jeśli nie ma żadnych z tych skrótów, skrypt zostaje wykonany liniowo od początku do końca w chwili uruchomienia.

Aby utworzyć nowy skrypt:

  1. Pobierz i zainstaluj program AutoHotkey.
  2. Kliknij prawym przyciskiem myszy puste miejsce na pulpicie albo w dowolnym folderze.
  3. W menu, które się pojawi wybierz opcję Nowy -> AutoHotkey Script (można też kliknąć pozycję Nowy -> Dokument tekstowy).
  4. Wpisz nazwę pliku i dodaj rozszerzenie .ahk. Na przykład: Test.ahk
  5. Kliknij utworzony plik prawym przyciskiem myszy, aby otworzyć skrypt.
  6. W pustym wierszu wpisz poniższe polecenie:
    #space::Run www.google.pl

W przedstawionym powyżej skrypcie znak # oznacza klawisz Windows, a więc #space oznacza skrót klawiszowy składający się z klawisza Windows i spacji. Znaki :: oznaczają, że to co znajduje się za nimi powinno zostać wykonane w reakcji na naciśnięcie zdefiniowanego przed nimi skrótu klawiszowego. W tym przypadku następuje otwarcie wyszukiwarki Google. Aby wypróbować działanie tego skryptu, wykonaj następujące czynności:

  1. Zapisz i zamknij plik.
  2. Kliknij dwukrotnie plik, aby go uruchomić. W obszarze powiadomień pojawi się nowa ikona.
  3. Naciśnij klawisz Windows i trzymając go naciśnij spację. Nastąpi otwarcie strony internetowej w domyślnej przeglądarce.
  4. Aby wyłączyć lub zmodyfikować skrypt, kliknij prawym przyciskiem myszy znajdującą się w obszarze powiadomień zieloną ikonę z literą H.

Uwagi:

Uruchamianie programów i otwieranie dokumentów

Do uruchamiania programów oraz otwierania dokumentów, adresów URL i skrótów służy polecenie Run. Oto kilka przykładów jego użycia:

Run Notepad
Run C:Moje dokumentyAdresy.doc
Run C:Moje dokumentyMój skrót.lnk
Run www.yahoo.com
Run mailto:ktoś@gdzieś.com

Każdemu z powyższych poleceń można przypisać skrót klawiszowy reprezentowany w skrypcie przez tzw. etykietę skrótu klawiszowego. Pierwsze z poniższych poleceń definiuje skrót Win+N, a drugie — Control+Alt+C:

#n::Run Notepad
^!c::Run calc.exe

Powyżej przedstawione są przykłady skrótów jednowierszowych, czyli takich które mieszczą się w jednej linijce tekstu. Aby spowodować wykonanie kilku poleceń przez jeden skrót klawiszowy, każde z nich należy umieścić w osobnym wierszu pod definicją skrótu klawiszowego, a całość zakończyć słowem kluczowym return. Na przykład:

#n::
Run http://www.google.com
Run Notepad.exe
return

Jeśli program lub dokument nie jest integralną częścią systemu, należy podać do niego pełną ścieżkę:

Run %A_ProgramFiles%WinampWinamp.exe

Napis %A_ProgramFiles% to jedna ze zmiennych wbudowanych. Dzięki użyciu jej zamiast ścieżek typu C:Program Files zwiększa się szanse, że skrypt będzie działał także na innych komputerach. Uwaga: w nazwach poleceń i zmiennych nie są rozróżniane wielkie i małe litery. Na przykład „Run” to to samo, co „run”, a „A_ProgramFiles” jest tym samym, co „a_programfiles”.

Aby skrypt pozwalał programowi lub dokumentowi na zamknięcie przed kontynuowaniem działania, należy zamiast Run użyć polecenia RunWait. Na przykład poniższy skrypt wykona polecenie MsgBox dopiero, gdy użytkownik zamknie program Notatnik:

RunWait Notepad
MsgBox Użytkownik zakończył pracę (Notatnik został zamknięty).

Więcej informacji o uruchamianiu programów — przekazywanie parametrów, określanie katalogu roboczego i sprawdzanie kodu zamknięcia programu — znajduje się tutaj.

Generowanie zdarzeń naciśnięcia klawisza i przycisków myszy

Do generowania zdarzeń naciśnięcia klawisza do aktywnego (będącego na wierzchu) okna służy polecenie Send. Poniżej znajduje się przykładowy skrypt powodujący automatyczne wpisanie podpisu wiadomości e-mail po naciśnięciu skrótu klawiszowego Ctrl+Alt+S (aby to zadziałało, musi być aktywne okno edytora tekstu albo edytora wiadomości klienta pocztowego).

^!s::
Send Z poważaniem,{Enter}Jan Kowalski
return

Wszystkie znaki oprócz ciągu {Enter}, który reprezentuje naciśnięcie klawisza Enter, zostaną wysłane na wyjście dosłownie. Poniższy przykład ilustruje sposób wstawiania innych często używanych znaków specjalnych:

Send ^c!{tab}wklejono:^v

Ten skrypt wysyła naciśnięcia klawiszy Ctrl+C, po nich Alt+Tab, a później łańcuch „wklejono:”, po którym następuje wysłanie klawiszy Ctrl+V. Pełna lista znaków specjalnych i klawiszy znajduje się w opisie polecenia Send.

Naciśnięcia klawiszy można także wysyłać w reakcji na wpisanie w tekście wybranych skrótów. Są to tzw. skróty łańcuchowe. Poniższy skrypt na przykład zamienia wszystkie wystąpienia skrótu MM, po których znajduje się spacja lub przecinek na napis „Marilyn Manson”:

::MM::Marilyn Manson

Naciśnięcia przycisków myszy: aby wysłać do okna naciśnięcie przycisku myszy, najpierw trzeba poznać współrzędne X i Y miejsca, w którym to kliknięcie ma nastąpić. Informację tę można zdobyć przy użyciu dostępnych wraz z programem AutoHotkey narzędzi AutoScriptWriter i Window Spy. Poniżej znajduje się opis metody z wykorzystaniem narzędzia Window Spy:

  1. Uruchom narzędzie Window Spy z poziomu ikony w zasobniku systemowym albo z menu Start.
  2. Aktywuj interesujące Cię okno klikając jego pasek tytułu, przechodząc do niego za pomocą klawisza Tab lub korzystając z dowolnego innego sposobu (okno narzędzia Window Spy jest domyślnie zawsze na wierzchu).
  3. Przesuń kursor w żądane miejsce w oknie docelowym i zanotuj współrzędne, które zostaną wyświetlone w oknie narzędzia Window Spy (w systemie Windows XP i starszych należy nacisnąć kombinację klawiszy Shift-Alt-Tab, aby aktywować okno Windows Spy i skopiować „zamrożone” współrzędne).
  4. Użyj zdobytych współrzędnych w poleceniu Click. Poniższy przykładowy skrypt wysyła kliknięcie lewym przyciskiem myszy:
    Click 112, 223

Aby przesunąć kursor bez klikania, należy użyć polecenia MouseMove. Aby dokonać przeciągnięcia myszą, należy użyć polecenia MouseClickDrag.

Aktywowanie okien i manipulowanie nimi

Aby aktywować okno (przenieść je na wierzch), należy użyć polecenia WinActivate. Do sprawdzania czy dane okno istnieje, służą polecenia IfWinExist i WinWait. Poniżej znajdują się przykłady zastosowania tych poleceń:

IfWinExist Bez tytułu — Notatnik
{
    WinActivate
}
else
{
    Run Notepad
    WinWait Bez tytułu — Notatnik
    WinActivate
}

Przedstawiony powyżej skrypt najpierw sprawdza czy istnieje okno, którego tytuł zaczyna się od słów „Bez tytułu — Notatnik” (wielkość liter jest rozpoznawana) i jeśli je znajdzie, to je aktywuje. W przeciwnym przypadku zostaje uruchomiony program Notatnik (Notepad) i skrypt czeka na pojawienie się okna bez tytułu, aby je aktywować. W skrypcie tym zostało także wykorzystane ostatnie znalezione okno w celu uniknięcia konieczności określania tytułu okna dla każdej instrukcji WinActivate.

Inne często używane polecenia dotyczące okien to:

  • IfWinActive: sprawdza czy dane okno jest aktywne.
  • WinWaitActive: zmusza program do poczekania, aż dane okno stanie się aktywne (zazwyczaj używane po wysłaniu skrótu klawiszowego aktywującego okno, np. Ctrl+F włączającego funkcję wyszukiwania).
  • WinClose: zamyka okno.
  • WinMove: przenosi okno i ewentualnie zmienia jego rozmiar.
  • WinMinimize, WinMaximize, WinRestore: odpowiednio minimalizuje, maksymalizuje lub przywraca okno.

Pobieranie danych od użytkownika za pomocą poleceń MsgBox, InputBox itp.

Poniższy skrypt powoduje wyświetlenie okna dialogowego z przyciskami Tak i Nie:

MsgBox, 4, , Czy chcesz kontynuować?
IfMsgBox, No
    return
; W przeciwnym przypadku użytkownik wybrał Tak.
MsgBox Naciśnięto Tak.

Aby umożliwić użytkownikowi wpisanie tekstu, należy użyć polecenia InputBox. Aby umożliwić użytkownikowi wybranie pliku lub folderu, należy użyć odpowiednio polecenia FileSelectFile lub FileSelectFolder. Aby utworzyć niestandardowy formularz i interfejs użytkownika, należy posłużyć się poleceniem Gui.

Wskazówka: na podstawie przedstawionych wcześniej przykładów można się domyślić, że pierwszy przecinek w każdym poleceniu jest nieobowiązkowy (z wyjątkiem sytuacji, gdy pierwszy parametr jest pusty lub zaczyna się od znaków := lub = albo polecenie znajduje się na początku sekcji kontynuacji). Na przykład:

MsgBox To jest poprawne.
MsgBox, To też jest poprawne (tu nie opuszczono przecinka).

Stosowanie zmiennych i używanie schowka

Zmienna to obszar pamięci, w którym skrypt przechowuje tekst lub liczby. Zmienna zawierająca tylko cyfry (ewentualnie z punktem dziesiętnym) jest automatycznie interpretowana jako liczba, jeśli zostanie użyta w działaniu matematycznym lub wymagającej tego operacji porównania.

Wszystkie zmienne oprócz zdefiniowanych lokalnie w funkcjach są globalne, tzn. ich zawartość można odczytać i zmodyfikować w dowolnym miejscu skryptu. Zmiennych nie trzeba deklarować. Zaczynają istnieć w momencie ich pierwszego użycia (każda zmienna początkowo jest pusta).

Poniżej znajdują się przykładowe instrukcje przypisania zmiennej łańcucha znaków:

MyVar1 = 123
MyVar2 = mój łańcuch
Poniżej znajduje się przykład operacji porównania zawartości zmiennej z liczbą lub łańcuchem:
if MyVar2 = mój łańcuch
{
    MsgBox MyVar2 zawiera łańcuch „mój łańcuch”.
}
if MyVar1 >= 100
{
    MsgBox MyVar1 zawiera %MyVar1% — liczbę większą lub równą 100.
}

W wierszu z instrukcją MsgBox nazwa zmiennej MyVar1 została zapisana między znakami procentu. Powoduje to wyświetlenie zawartości tej zmiennej w tym miejscu. W ten sam sposób można skopiować zawartość jednej zmiennej do innej. Na przykład:

MyVarConcatenated = %MyVar1% %MyVar2%

Powyższa instrukcja zapisuje łańcuch „123 mój łańcuch” (bez cudzysłowów) w zmiennej MyVarConcatenated.

Aby porównać zawartość jednej zmiennej z inną, można napisać kod podobny do poniższego:

if (ItemCount > ItemLimit)
{
    MsgBox Wartość przechowywana w zmiennej ItemCount, która wynosi %ItemCount%, jest większa niż %ItemLimit%.
}

Należy zauważyć, że w pierwszym wierszu powyższego skryptu znajdują się nawiasy. Oznacza to, że instrukcja if zawiera wyrażenie. Bez nawiasów wiersz ten zostałby potraktowany jako „instrukcja if bez wyrażenia”, w związku z czym nazwę zmiennej ItemLimit trzeba by było ująć w nawias (w tego typu instrukcjach if można użyć najwyżej jednego operatora porównywania; tzn. instrukcje te nie mogą zawierać operatorów arytmetycznych ani logicznych, jak AND i OR).


Działania matematyczne
: wynik wyrażenia matematycznego należy przypisać do zmiennej za pomocą operatora składającego się z dwukropka i znaku równości :=, jak pokazano w poniższym przykładzie:

NetPrice := Price * (1 – Discount/100)

Pełna lista operatorów matematycznych znajduje się w dokumentacji wyrażeń.


Schowek: istnieje specjalna zmienna o nazwie Clipboard, która przechowuje aktualną zawartość schowka systemu Windows. Mimo to można jej używać tak samo, jak każdej innej zmiennej. Na przykład poniższa instrukcja wyświetla bieżącą zawartość schowka:

MsgBox %clipboard%

Poniżej znajduje się przykładowy skrypt ilustrujący modyfikowanie schowka. Skrypt ten zastępuje aktualną zawartość schowka nowym tekstem:

clipboard = Wiersz tekstu.`r`nDrugi wiersz tekstu.`r`n

Napisy `r i `n (akcent i litera „r” lub „n”) reprezentują dwa znaki specjalne: powrót karetki i znak nowego wiersza. Znaki te oznaczają rozpoczęcie nowego wiersza tak, jakby został naciśnięty klawisz Enter.

Aby dodać tekst do schowka (lub innej zmiennej), można napisać instrukcję podobną do poniższej:

clipboard = %clipboard% Tekst, który ma zostać dodany.

Aby dowiedzieć się więcej, zobacz części dokumentacji poświęcone schowkowi i zmiennym.

Wielokrotne wykonywanie czynności

Aby wykonać jakieś działanie kilka razy po kolei, należy użyć pętli. Poniższa pętla trzy razy wyświetla okno MsgBox:

Loop 3
{
    MsgBox To okno zostanie wyświetlone trzy razy.
}

Za słowem kluczowym Loop można umieścić zmienną, co jest przydatne w sytuacjach, gdy o liczbie powtórzeń decyduje jakaś inna część skryptu:

Loop %RunCount%
{
    Run C:Check Server Status.exe
    Sleep 60000  ; Czeka 60 sekund.
}

Powyższa pętla zostanie wykonana określoną liczbę razy, pod warunkiem, że zmienna RunCount nie będzie miała wartości 0, w którym to przypadku pętla ta zostałaby w ogóle pominięta.

Pętla może także samoczynnie zakończyć działanie, gdy zmieni się jeden warunek lub więcej. Poniższy skrypt wysyła kliknięcia lewym przyciskiem myszy przez cały czas, gdy użytkownik trzyma wciśnięty klawisz F1:

$F1::  ; Zamiana klawisza F1 w skrót klawiszowy (znak $ umożliwia zastosowanie trybu „P” użytego poniżej polecenia GetKeyState).
Loop  ; Ponieważ nie podano żadnej liczby, pętla ta będzie działać w nieskończoność albo do napotkania w swoim kodzie instrukcji „break” lub „return”.
{
    if not GetKeyState("F1", "P")  ; Jeśli wartością tej instrukcji jest prawda, oznacza to, że użytkownik zwolnił klawisz F1.
        break  ; Wyjście z pętli.
    ; W przeciwnym przypadku (ponieważ nie nastąpiło przerwanie) klikanie jest kontynuowane.
    Click  ; Kliknięcie lewym przyciskiem myszy w miejscu, w którym znajduje się kursor.
}
return

Gdy użytkownik zwolni klawisz F1, pętla to wykryje i zatrzyma się dzięki instrukcji break. Break powoduje przeniesienie sterowania do wiersza znajdującego się za klamrą zamykającą pętli.

Ten sam efekt można także uzyskać przy użyciu pętli while:

$F1::
while GetKeyState("F1", "P")  ; Dopóki klawisz F1 jest wciśnięty.
{
    Click
}
return

Powyżej zostały przedstawione pętle o zastosowaniu ogólnym. Istnieje też kilka rodzajów pętli o specjalnych zastosowaniach:

Odczyt i zapis plików: pętla służąca do pobierania z pliku tekstowego tekstu po jednej linijce. Za jej pomocą można na przykład przekształcić plik na inny format, zmieniając każdą linijkę osobno. Można też użyć jej do wyszukiwania wierszy tekstu spełniających określone kryteria.

Pętla działająca na plikach i folderach: pętla służąca do pobierania po jednym określonych plików lub folderów. Za jej pomocą można wykonać wybrane działania na każdym pliku lub folderze spełniającym zadane kryteria.

Pętla parsująca: pobiera pojedynczo fragmenty łańcuchów. Za jej pomocą można łatwo rozbić łańcuch „czerwony, zielony, niebieski” na trzy elementy.

Pętla rejestru: pobiera po jednym elemencie zawartości określonego podklucza rejestru.

Praca na plikach i folderach

Do dodawania tekstu na końcu plików (i tworzenia nowych plików) służy polecenie FileAppend, którego przykład użycia pokazano poniżej. Użyto w nim symbolu `n (nowy wiersz), aby po zakończeniu działania rozpocząć nowy wiersz:

FileAppend, Linijka tekstu, która ma zostać dodana.`n, C:Moje dokumentyMój plik tekstowy.txt

Aby zastąpić istniejący plik nowym, należy przed poleceniem FileAppend użyć polecenia FileDelete. Na przykład:

FileDelete, C:Moje dokumentyMój plik tekstowy.txt

Inne często używane polecenia dotyczące plików i folderów to:

4 komentarze

  1. Witam, potrzebuje skryptu od jakiegoś magika. Przy przytrzymaniu prawego przycisku funkcyjnego windowsa, przytrzymują sie lewy alt i lewy ctrl. Pozdrawiam, jest szansa na to ?

    Odpowiedz
  2. Proszee powiedźcie mi jak zrobić ,aby klikając klawisz ,,insert” komputer odczytał to jako nastepujace kliknięcia
    ,,Klawisz T , strzałka w górę , enter”

    Odpowiedz
  3. Hej
    czy mógłbyś mi napisać jak przez .ahk podmienić kombinacje klawiszy na inny pojedyńczy klawisz, dokładnie jest to Fn+PgUp chcę zamienić na Home.

    Czy tym programem można przypisać do klawisza funkcje z menu w przeglądarce, jeśli tak to jak, dzieki.

    Odpowiedz
  4. bardzo dobrzee jest ten opis

    Odpowiedz

Dyskusja

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *