Jakiś czas temu zaopatrzyłem się w takie fajne urządzenie jakim jest Stream Deck. Jest to taka jakby dodatkowa klawiatura z konfigurowalnymi przyciskami do których możemy przypisać dowolne akcje, oraz wgrać własne ikony. Dla każdego przycisku można skonfigurować następujące akcje:
- Uruchomienie programu
- Symulacja naciśnięcia klawisza lub skrótu klawiszowego
- Wpisanie jakiegoś tekstu
- Odpalenie adresu URL
- Akcje multimedialne (Play, Pauza, Wyciszenie głosu etc.)
- Multi-akcje (tj. naciśnięcie danego przycisku może wyzwolić kilka wyżej podanych akcji w określonej kolejności)
Stream Deck jest popularny wśród YouTuberów. Otóż program do nagrywania Streamów (np. OBS) wzbogacony o wtyczkę do obsługi Stream Decka może obsługiwać takie akcje jak np. zmiana sceny. Przykładowo aktywną sceną może być mój ekran, inną sceną może być kamera skierowana na moją twarz, kolejną sceną może być statyczna plansza z napisem PRZERWA, a jeszcze inną sceną może być kombinacja tj. mój ekran + nagranie z kamery skierowanej na moją twarz w prawym dolnym rogu ekranu). Jak widać, wygodne przełączanie scen nie wymaga naciskania jakiś dziwnych kombinacji klawiszy tylko wystarczy nacisnąć odpowiedni fizyczny przycisk na „dodatkowej klawiaturce”. Dodatkowo każdy klawisz może wyświetlać dowolną grafikę dzięki czemu nie musimy pamiętać, że np. wyciszenie mikrofonu to 3 ikonka od lewej w górnym rzędzie.
Pisząc w VBA różne aplikacje pomyślałem, że można by było wywoływać różne formularze po naciśnięciu odpowiedniego przycisku na Stream Decku (jest to ciekawa alternatywa względem tworzenia własnych poleceń na wstążce)
No i teraz pojawia się pytanie: w jaki sposób Stream Deck miałby się komunikować z naszą aplikacją?
Pomysł jaki narodził się w mojej głowie jest bardzo prosty: otóż można zasymulować naciśnięcie jakiejś kombinacji klawiszy, które aplikacja będzie przechwytywać. Tylko znalezienie „wolnej” kombinacji klawiszy jest dość trudne. Ale tutaj pewna ciekawostka: na klawiaturze mamy klawisze funkcyjne od F1 do F12, jednak standard przewiduje, że na klawiaturze mogą być klawisze funkcyjne aż do F24. Rzadko kiedy spotyka się klawiatury z większą liczbą klawiszy funkcyjnych więc nasz Strem Deck może symulować np. naciśnięcie klawisza F13 a z kolei np. w Excelu możemy odpowiednio przechwycić naciskane klawisze.
A jak przechwycić naciskane klawisze? W przypadku Excela jest to bardzo proste: możemy użyć metody Application.OnKey, do przechwytywania naciskanych klawiszy którą wywołamy np. w zdarzeniu Workbook_Open
Private Sub KlawiszF13()
' Po naciśnięciu klawisza F13 (ikonka Zespoły na Stream Decku) pokaż odpowiedni formularz
frmZespoly.Show
End Sub
Private Sub KlawiszF13()
' Po naciśnięciu klawisza F14 (ikonka Sala na Stream Decku) pokaż odpowiedni formularz
frmSala.Show
End Sub
Private Sub Workbook_Open()
Application.OnKey "{F13}", "KlawiszF13"
Application.OnKey "{F14}", "KlawiszF14"
'itp.
End Sub
Oczywiście ten trik działa tylko wtedy, gdy jesteśmy w Excelu ( w jakimś arkuszu), nie działa gdy np. jest załadowany niestandardowy formularz naszej appki.