N1MM AHK Remapping Keys

Nie wszystkie kombinacje klawiszy proponowane przez popularny program N1MM Logger +  mogą być dla nas przyjazne.
Korzystając z prostego skryptu AHK możemy spróbować ułatwić sobie życie, i dokonać małych roszad na klawiaturze podczas pracy w programem.
Zaprezentowany poniżej sposób możemy użyć do „wysyłania” kombinacji klawiszy do dowolnego uruchomionego programu, w celu wywołania w nim  określonych tą kombinacją klawiszy akcji (np. wybór określonej pozycji z menu).

Przykład:
Kombinację Alt+F5 programu N1MM, czyli zamianę VFO A z VFO B, chcę zamiennie wywoływać kombinacją: prawy Ctrl + kursor w lewo
AutoHotkey jest idealnym językiem to zbudowania takiej mini aplikacji.  Użyjemy do tego tzw. AHK Hotkeys

Najprostsza wersja skryptu załatwiający temat (jedna linijka kodu, po zapisaniu do pliku z rozszerzeniem .ahk jest już działającym skryptem):


RControl & Left:: Send !{F5}

To może troszkę bardziej zaawansowanie :


SetTitleMatchMode, 2 #IfWinActive FTDX RControl & Left:: Send !{F5} #IfWinActive



Krótka analiza kodu:

  SetTitleMatchMode, 2

w/w oznacza poinformowanie interpretera AHK, że okna programów będziemy rozpoznawać po ich nazwach lub fragmentach nazw;

  #IfWinActive FTDX
     ..code ..
  #IfWinActive

w/w oznacza, że fragment kodu znajdujący się pomiędzy w/w liniami wykona się TYLKO, gdy aktywne będzie okno zawierające w nazwie ciąg znaków FTDX

Okno N1MM Entry w tytule podaje zawsze nazwę obsługiwanego radia; oczywiście do testów wprowadź do tego skryptu swoją nazwę radia, którą widzisz na belce programu N1MM (zamiast mojego „FTDX”);  zadziała również ciąg znaków „VFO A” – bo też jest obecny na tej belce:

Autohotkey N1MM Remaping Keys i najważniejszy fragment:

  RControl & Left:: Send !{F5}

po naciśnięciu kombinacji  prawy Ctrl + ⬅ (kursor w lewo) wysłana do programu zostanie (komendą SEND) kombinacja Alt-F5, i funkcja skojarzona w programiew z Alt-F5 zostanie wykonana.

Do pokazanego skryptu możemy dołożyć oczywiście kolejne funkcje „mapujące” – np.  Ctrl+ESC ma wywołać kombinację Alt+F8 („powrót do poprzedniej częstotliwości”) – co da nam taki skrypt:


SetTitleMatchMode, 2 #IfWinActive FTDX RControl & Left:: Send !{F5} Ctrl & ESC:: Send !{F8} #IfWinActive

  Dzięki temu, że stosujemy dodatkową parę dyrektyw:

#IfWinActive

to jeżeli N1MM nie będzie aktywny,  przykładowa kombinacja Ctrl-ESC będzie dalej spełniała swoją pierwotną funkcję, czyli otwarcie menu start systemu Windows.  

Możemy zupełnie zrezygnować z pary dyrektyw #IfWinActive, wtedy „zamiany klawiszy”  będą dostępne niezależnie od programu (co nie zawsze jest oczywiście pożądane)


A co w przypadku, gdy chcemy wywołać daną funkcję programu, jeżeli program nie jest aktywnym oknem? Pomysł na zmodyfikowany skrypt poniżej. W pierwszej kolejności, po pojawieniu się kombinacji klawiszy,  skrypt sprawdzi: czy okno zawierające w tytule na „belce” ciąg znaków, określony tym razem zmienną win_id, w ogóle istnieje: IF WinExist()  ,   (czyli – czy program jest uruchomiony?) jeżeli tak, to czyni je aktywnym: WinActivate, czeka na pełną gotowość okna: WinWait i dopiero wtedy wysyła do okna interesującą nas kombinację klawiszy:  


DetectHiddenWindows
, On SetTitleMatchMode, 2 win_id := "FTDX" RControl & Left:: if WinExist(win_id) { WinActivate WinWait, %win_id% Send !{F5} } Return Ctrl & ESC:: if WinExist(win_id) { WinActivate WinWait, %win_id% Send !{F8} } Return

  I na koniec – jeszcze inny sposób na wysłanie kombinacji klawiszy niezależnie, jaki mamy status aktywności okna:  


DetectHiddenWindows
, On SetTitleMatchMode, 2 win_id := "FTDX" RControl & Left:: if WinActive(win_id) Send !{F5} else ControlSend, , !{F5}, FTDX Return Ctrl & ESC:: if WinActive(win_id) Send !{F8} else ControlSend, , !{F8}, FTDX Return

Właśnie za tą elastyczność lubię język AHK 

Ważne:
Ponieważ lista kombinacji klawiszy i skrótów w programie N1MM jest na prawdę imponująca, należy mieć świadomość, że możemy przez przypadek „przykryć” niektóre z nich naszym skryptem – i pierwotna funkcja z nimi skojarzona może przestać być dla nas dostępna.

Przygotowany skrypt możemy „na stałe” podpiąć do programu – i będzie uruchamiany razem z N1MM. > Opis podpięcia skryptu AHK do N1MM



Przydatne linki:
https://n1mmwp.hamdocs.com/appendices/third-party-software/#autohotkey-ahk
https://n1mmwp.hamdocs.com/setup/keyboard-shortcuts/

https://www.autohotkey.com/docs/Hotkeys.htm#Symbols
https://www.autohotkey.com/docs/misc/Remap.htm