Czy to nie bardzo irytujące, że przynajmniej w systemie Windows każde okno może pojawić się w dowolnym miejscu na ekranie? Czy ta codzienna losowość działa Ci na nerwy i wolisz mieć większą kontrolę nad rozmieszczeniem okien na ekranie? Cóż, teraz możesz, dzięki AutoHotKey.
W tym samouczku zobaczymy, jak rozwiązać ten problem za pomocą skryptu AutoHotKey. Zbudujemy go tak, żeby się poruszał każdy okno na środek ekranu po naciśnięciu klawisza. Brzmi słodko? Zobaczmy, jak to się robi!
Jak skonfigurować klawisz skrótu centrujący okno za pomocą AutoHotKey?
Połowa bitwy przy tworzeniu skryptu polega na wymyśleniu sposobu, w jaki będzie on działał, jeszcze zanim wpiszesz pojedynczy znak. Zróbmy więc taki plan działania w prostym języku angielskim, który następnie „przekształcimy” w skrypt.
„Problem” w systemie Windows
Windows (jak w „prostokątnych rzeczach na naszych ekranach”, a nie w systemie operacyjnym) ma tendencję do pojawiania się w dowolnym miejscu ekranu. To rozprasza i może być denerwujące, gdy powtarza się. Zwłaszcza, gdy mamy do czynienia z wieloma requesterami, którzy pojawiają się w różnych miejscach, oczekując danych wejściowych użytkownika.
Rozwiązanie problemu
Oprócz wysyłania naciśnięć klawiszy i kliknięć myszą do dowolnego okna, AutoHotKey może również nimi manipulować. Widzieliśmy w przeszłości, jak możesz użyj AutoHotKey, aby przypiąć okna „zawsze na wierzchu” za pomocą skrótu klawiaturowego. Tym razem jednak wykorzystamy możliwości manipulacji oknami AutoHotKey, aby:
- „Odczytaj” identyfikator aktywnego okna.
- „Odczytaj” również jego wymiary (szerokość i wysokość).
- „Odczytaj” wymiary monitora.
- Połącz wymiary monitora i okna, aby obliczyć optymalne współrzędne do prezentacji tego okna w środku ekranu.
- Przesuń okno na te współrzędne.
Na koniec zmapujemy powyższe na skrót. W ten sposób możesz nazwać to „na żądanie” zamiast stosować go na wszystko Windows – które mogą zakłócać działanie pełnoekranowych aplikacji i gier.
Zauważ, że w tym samouczku zagłębimy się w AutoHotKey. Jeśli go nie znasz i chcesz wcześniej dowiedzieć się więcej, sprawdź nasz szybki przewodnik po AutoHotKey dla początkujących.
Po pierwsze, konfiguracja klawisza skrótu
Wspomnieliśmy, jak zmapujemy funkcję, którą stworzymy, na skrót. Jednak prawdopodobnie lepiej będzie, jeśli zaczniemy od tej części, aby usunąć to z drogi.
Zacznij od pobrania instalatora z Oficjalna strona AutoHotKey. Wybierz „bieżącą” wersję zamiast v2 beta lub przestarzałą wersję 1.0. Następnie zainstaluj go na swoim komputerze.
Uruchom Eksplorator plików (najszybszy sposób to kombinacja klawiszy Windows + E) i przejdź do ścieżki, w której chcesz utworzyć skrypt. Po zainstalowaniu AutoHotKey w menu po kliknięciu prawym przyciskiem myszy pojawi się kilka nowych opcji. Kliknij prawym przyciskiem myszy puste miejsce w oknie Eksploratora plików i wybierz Nowy > Skrypt AutoHotKey.
Nadaj plikowi skryptu nazwę, a następnie kliknij go prawym przyciskiem myszy i edytować to. Jeśli nie używasz przyjaznej dla kodu aplikacji do edycji tekstu, takiej jak Visual Studio Code lub Notepad ++, użyj Notatnika systemu Windows. Unikaj edytorów takich jak Wordpad, które mogą dodawać bezużyteczną (w tym celu) składnię do twojego „kodu”.
W wybranym edytorze zobaczysz, że skrypt AutoHotKey ma już kilka wstępnie wypełnionych wierszy u góry. Są tam ze względu na stabilność i kompatybilność. Można je modyfikować, ale zostaw je tak, jak są w tym samouczku.
„Przesuń” dwa lub trzy wiersze poniżej nich i wprowadź skrót, który uruchomi twoją funkcję. Możesz stworzyć kombinację klawiszy, używając „+” dla Shift, „^” dla CTRL, „!” dla Alt i "#" dla klawisza Windows, jak również każdy "normalny" klawisz na klawiaturze (litery i cyfry).
Na przykład, aby kombinacja CTRL + Y uruchomiła skrypt, użyj:
^y::
Podwójne ":" to jak powiedzenie "hej, AutoHotKey, zmapuj ciąg lub kombinację klawiszy po lewej stronie na wszystko po prawej".
„Przesuń” o dwie lub trzy linie poniżej, naciskając klawisz Enter, i wpisz „return”, co oznacza koniec danej funkcji. Pełny wynik powinien wyglądać następująco:
^y::
; Ten jest komentarz.
zwrócić
Ten "; To jest komentarz." jest dokładnie tym, komentarzem w "kodzie" skryptu, którego AutoHotKey nie wykona. Jest tam w celach dokumentacyjnych, aby zaznaczyć miejsce, w którym w kolejnych krokach wprowadzimy „kod” skryptu.
Jeśli postępowałeś zgodnie z naszym przewodnikiem tworzenie skrótów klawiszowych specyficznych dla aplikacji za pomocą AutoHotKey w przeszłości, w tym przypadku... nie. Chcesz, aby skrót wyśrodkowania okna był „globalny” do wyśrodkowania każdy okno z każdy aplikacja. Jeśli „powiążesz” go z konkretną aplikacją, będzie działać tylko w oknach tej aplikacji.
Uzyskaj szczegóły aktywnego okna
Chcemy, aby nasz skrót działał na aktywnym oknie, a także potrzebujemy jego wymiarów do naszych obliczeń. Możemy znaleźć te szczegóły w następujący sposób:
WinGetTitle, ActiveWindowTitle, A
Szerokość WinGetPos, wysokość, %ActiveWindowTitle%
Zastąp wiersz komentarza, który dodaliśmy do skryptu w poprzedniej sekcji, dwoma wierszami powyżej. Wynik?
- Pierwsza linia zawiera tytuł aktywnego okna.
- Druga linia odczytuje jej szerokość i wysokość i odwzorowuje je na słowa/zmienne „Szerokość” i „Wysokość”, których użyjemy następnie do naszych obliczeń.
Otrzymaliśmy szczegóły aktywnego okna, ale potrzebujemy również wymiarów widocznego obszaru monitora, aby osiągnąć nasz cel. Na szczęście znalezienie ich jest jeszcze łatwiejsze.
A co z głównym obszarem monitorowania?
Nie potrzebujemy dodatkowych poleceń, aby znaleźć szerokość i wysokość naszego głównego monitora. AutoHotKey zawiera dwie wstępnie ustawione zmienne, które już zawierają te informacje dla nas: "A_ScreenWidth" i "A_ScreenHeight".
Tak więc, kiedy zobaczysz je w następnej sekcji, już "zawierają" szerokość i wysokość monitora głównego. Nie ma potrzeby przypisywania im poprawnych wartości. Dzięki temu możemy je wykorzystać bezpośrednio w naszych obliczeniach.
Czas obliczyć pozycję docelową
Obliczenia możemy uwzględnić bezpośrednio w tych punktach skryptu, w których ich potrzebujemy. Jednak łatwiej i lepiej dla czytelności, jeśli zmapujemy je na dwie zmienne i następnie użyj tych zmiennych w naszym skrypcie.
Przejdźmy więc do „TargetX” jako zmiennej, która będzie przechowywać współrzędne poziome, a „TargetY” jako jeden z pionowymi współrzędnymi, w które powinniśmy przesunąć okno, aby pojawiło się w środku ekran.
TargetX := (A_ScreenWidth/2)-(Szerokość/2); Tutaj obliczamy poziomą okno cel...
Cel Y := (A_Wysokość Ekranu/2)-(Wysokość/2); ...a tutaj pionowa.
Rozszyfrujmy te linie prostym angielskim:
- „TargetX” i „TargetY” to dwie zmienne.
- ":=" informuje AutoHotKey, że zmienne powinny być równe wynikom obliczeń po prawej stronie i że te wyniki powinny być traktowane jako liczby.
- „(A_ScreenWidth/2)” dzieli całą szerokość monitora przez dwa.
- „(Width/2)” robi to samo dla szerokości aktywnego okna.
W związku z powyższym odejmujemy połowę szerokości aktywnego okna od połowy szerokości ekranu. Pozostała przestrzeń po lewej stronie okna - od lewej strony ekranu do miejsca, w którym powinno się pojawić okno. Druga linia robi to samo, ale dla wysokości.
Teraz, aby zmienić położenie okna
Wyposażeni we wszechpotężną wiedzę zdobytą dzięki mistycznym rozkazom, które widzieliśmy powyżej, możemy teraz stworzyć nasze magiczne zaklęcie, które dopełni rytuał teleportacji przez okno. Lub, w prostym języku angielskim, użyj polecenia „WinMove” AutoHotKey, aby przesuwać okna po ekranie.
WinMove oczekuje, że „nakarmimy” go co najmniej trzema informacjami, które pozwolą mu wykonać swoje zadanie: tytułem docelowego okna i współrzędnymi, gdzie je przenieść. Ponieważ już zmapowaliśmy te informacje na zmienne, polecenie jest tak proste, jak:
WinMove, %ActiveWindowTitle%,,%TargetX%,%TargetY%
W powyższym:
- „WinMove” to polecenie AutoHotKey, które przesuwa okno.
- „%ActiveWindowTitle%” to zmienna, w której mapowany jest tytuł aktywnego okna.
- „%TargetX%” i „%TargetY%” to współrzędne poziome i pionowe miejsca przesunięcia okna.
Możesz także zmienić rozmiar okien za pomocą WinMove, pominąć te, które mają określone znaki w tytułach lub treści itp. Ponieważ te funkcje wykraczają poza zakres tego artykułu, sprawdź Oficjalna dokumentacja AutoHotKey dotycząca polecenia WinMove więcej na ich temat.
Scenariusz końcowy
Wreszcie docieramy do najtrudniejszej części naszej podróży. Przygotuj się na następny krok, oczekuje, że zapiszesz skrypt i, cóż... Uruchom.
Tak, to wszystko – scenariusz jest gotowy i nie pozostaje nic innego, jak go wypróbować. Użyj zdefiniowanego skrótu, a każde aktywne okno zostanie przeniesione na środek ekranu.
Ostateczny plik skryptu, otwarty w edytorze tekstu, powinien wyglądać mniej więcej tak:
#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; Zalecana dlaNowy skrypty ze względu na jego doskonałą szybkość i niezawodność.
SetWorkingDir %A_ScriptDir%; Zapewnia spójny katalog początkowy.
^y::
WinGetTitle, ActiveWindowTitle, A; Pobierz aktywne okno's tytuł dla "celowanie" to/działanie na nim.
WinGetPos szerokość, wysokość, %ActiveWindowTitle%; Zdobądź aktywny oknopozycja, używana dla nasze obliczenia.
TargetX := (A_ScreenWidth/2)-(Szerokość/2); Oblicz cel poziomy, do którego przesuniemy okno.
TargetY := (A_ScreenHeight/2)-(Wysokość/2); Oblicz położenie w pionie z ten okno.WinMove, %ActiveWindowTitle%,,%TargetX%,%TargetY%; Przesuń okno do obliczonych współrzędnych.
zwrócić
Zauważ, że możesz skopiować powyższy skrypt, wkleić go w Notatniku lub podobnym edytorze tekstu i zapisać z rozszerzeniem AHK. Następnie „uruchom” go z zainstalowanym AutoHotKey, aby wyśrodkować dowolne okno po naciśnięciu CTRL + Y. Jeśli nie podoba ci się ten skrót, dostosuj linię „^y::” do innej kombinacji klawiszy. Na przykład, !+c::
mapuje funkcję na kombinację klawiszy Shift + Alt + C.
Dodatkowy utwór
Dla Twojej wygody postanowiliśmy wyczarować i dołączyć dodatkowy skrypt, który będzie przydatny dla osób z konfiguracjami z dwoma monitorami.
Aby uprościć ten artykuł, zamieściliśmy zamiast tego informacje o działaniu skryptu w postaci komentarzy. Możesz je usunąć ze swojej iteracji.
Krótka historia tego, jak różni się od powyższego skryptu, polega na tym, że dodaliśmy również zmienną PositionToggle i pewną „logikę IF”. Następnie używamy ich do „przerzucania” okna między monitorami. Powinniśmy zauważyć, że jest to nieeleganckie i „hackowe” rozwiązanie problemu. Jednak woleliśmy to od bardziej uproszczonego kodu, ponieważ takie podejście jest łatwiejsze do zrozumienia i dostosowania dla wszystkich, którzy nie znają AutoHotKey.
#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; Zalecana dlaNowy skrypty ze względu na jego doskonałą szybkość i niezawodność.
SetWorkingDir %A_ScriptDir%; Zapewnia spójny katalog początkowy.
Przełącznik pozycji = 1; Posługiwać się a numerjak przełącznik dla cechowanie na które monitorują okno powinno się pojawić.
^y::
WinGetTitle, ActiveWindowTitle, A
Szerokość WinGetPos, wysokość, %ActiveWindowTitle%Jeśli PositionToggle = 1; Sprawdzać stan przełącznika i „robić co jest między nawiasami klamrowymi”, jeśli jest ustawićdo1dla nasz główny monitor.
{
CelX := (A_ScreenWidth/2)-(Szerokość/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
Przełącznik pozycji = 2; "Trzepnięcie" przełącznik tak, że jeśli ponownie użyjemy skrótu, nasze aktywne okno przeniesie się na drugi monitor.
}
Inaczej, jeśli PositionToggle = 2; Czy wcześniej używaliśmy skrótu, "trzepotanie" przełączyć numer na drugi monitor? Wtedy skrypt powinien zamiast tego robić co's między kolejnymi nawiasami klamrowymi zamiast powyższych.
{
SysGet, Mon2, Monitor, 2; Zdobądź drugi monitor's szczegóły
Mon2Width := Mon2Right - Mon2Left; Oblicz drugi monitor's rzeczywista szerokość.
Mon2Height := Mon2Bottom - Mon2Top; Oblicz drugi monitor's rzeczywista wysokość.TargetX := (Mon2Szerokość/2)-(Szerokość/2)+A_Szerokość ekranu; Oblicz, gdzie przenieść okno. Zauważ, że dodajemy również monitor główny's szerokość od AutoHotKey może't przesuwać okna na poszczególnych monitorach, ale na ich połączonych; "powierzchnia".
Cel Y := (Mon2Height/2)-(Mon2Height/2)+Mon2Top; Oblicz optymalny pionowy cel do przesuwania okna na drugim monitorze. Podobnie jak powyżej, drugi monitor's pionowe szczegóły są wykrywane w stosunku do monitora głównego. Dlatego musimy wykazać się kreatywnością, aby uzyskać optymalny cel, potwierdzając, jak drugi monitor'najlepsza jest't równy 0 (jak pierwotna's).PozycjaPrzełącz = 1; Przesuń przełącznik z powrotem, aby jeśli ponownie używamy klawisza skrótu, okno wróci do monitora głównego.
}WinMove, %ActiveWindowTitle%,,%TargetX%,%TargetY%; Rzeczywista akcja, przenoszenie aktywnych okno do naszych obliczonych współrzędnych.
zwrócić
Wyśrodkuj okno za pomocą klucza, w łatwy sposób
A teraz gotowe! Jeśli wszystko działa dobrze, możesz teraz użyć nowo skonfigurowanego skrótu do wyśrodkowania okna w dowolnym momencie.
Znajdź, gdzie marnujesz czas w systemie Windows dzięki AutoHotKey
Czytaj dalej
Powiązane tematy
- Okna
- Windows 10
- Okna 11
- AutoHotkey
- Dostosowywanie systemu Windows
O autorze
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.
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ć