Jak wykryć, czy jest wciśnięty klawisz Scroll Lock?

przez | 2024-03-06

Klawisz Scroll Lock jest klawiszem, który występuje na klawiaturach ze względów historycznych. Prawie żaden współczesny program go nie używa. Jedną z nielicznych znanych aplikacji, które go używają to Excel. Wciśnięty klawisz Scroll Lock zmienia zachowanie tej aplikacji. Gdy naciskamy np. strzałkę w dół, to kursor „schodzi” do komórki znajdującej się wiersz niżej, np. był w komórce B20 a po naciśnięciu strzałki w dół pojawia się w komórce B21.

Natomiast jeśli mamy wciśnięty klawisz Scroll Lock (jest zapalona lampka) to wtedy po naciśnięciu strzałki w dół kursor nadal zostaje w komórce B20, ale cały arkusz się przewija się o jeden wiersz w dół (czyli jeśli były wyświetlone na ekranie wiersze od 1 do 28 to będą wyświetlone wiersze od 2 do 29).

Być może czasami potrzebujesz w swojej aplikacji wykryć czy jest wciśnięty klawisz Scroll Lock. Podobnie jak w przypadku sprawdzania, czy mamy wciśnięty klawisz Num Lock jak i Caps Lock możemy skorzystać z funkcji API: GetKeyState. Jednak o dziwo dla klawisza Scroll Lock nie znalazłem predefiniowanej stałej jak to było w przypadku klawisza Num Lock (vbKeyNumlock = 144) czy Caps Lock (vbKeyCapital = 20). Tutaj musimy użyć kodu klawisza 145.

Więc nasz kod wygląda następująco:

#If VBA7 Then
    Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As LongPtr) As Integer
#Else
    Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If

Function ScrollLockEnabled() As Boolean
    ScrollLockEnabled = (GetKeyState(145) = 1)
End Function

Pewnie zastanawiasz się, skąd wyczarowałem kod klawisza Scroll Lock 145. Otóż można albo znaleźć w Internecie, albo można zachować się jak rasowy programista, czyli napisać kilka linijek kodu. Proponuję utworzyć pusty formularz (UserForm) a na niego nanieść etykietę Label i nadać jej nazwę lblKodKlawisza, i na szybko napisać taki kod:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    lblKodKlawisza.Caption = KeyAscii
End Sub

W ten oto prosty sposób można poznać kod dowolnego wciśniętego klawisza.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.