Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Czytniki ekranu, takie jak Narrator, muszą móc rozpoznawać i obsługiwać zdarzenia przycisków systemu sprzętowego oraz przekazywać ich stan użytkownikom. W niektórych przypadkach czytnik ekranu może wymagać wyłącznego zarządzania tymi zdarzeniami przycisków sprzętowych i nie pozwalać im przechodzić do innych procedur obsługi.
Począwszy od systemu Windows 10 w wersji 2004, aplikacje platformy UWP mogą nasłuchiwać i obsługiwać zdarzenia przycisków sprzętowych Fn w taki sam sposób jak inne przyciski sprzętowe. Wcześniej ten przycisk systemowy działał tylko jako modyfikator sposobu zgłaszania zdarzeń i stanu innych przycisków sprzętowych.
Uwaga / Notatka
Obsługa przycisku Fn jest specyficzna dla producenta OEM i może obejmować funkcje, takie jak możliwość przełączania lub blokowania (w przeciwieństwie do korzystania z kombinacji naciśnij-i-przytrzymaj), wraz z odpowiednim wskaźnikiem blokady, co może być nieprzydatne dla użytkowników niewidomych lub z zaburzeniami wzroku.
Zdarzenia przycisku Fn są udostępniane za pośrednictwem nowej klasy SystemButtonEventController w przestrzeni nazw Windows.UI.Input . Obiekt SystemButtonEventController obsługuje następujące zdarzenia:
- PrzyciskFunkcjiSystemowejNaciśnięty
- PrzyciskFunkcjiSystemowejZwolniony
- SystemFunctionLockChanged
- Zmieniono wskaźnik blokady funkcji systemu
Ważne
SystemButtonEventController nie może odbierać tych zdarzeń, jeśli zostały już obsłużone przez program obsługi o wyższym priorytcie.
Przykłady
W poniższych przykładach pokazano, jak utworzyć SystemButtonEventController na podstawie kolejki dyspozytora i obsługiwać cztery zdarzenia obsługiwane przez ten obiekt.
Często, gdy naciśnie się przycisk Fn, aktywuje się więcej niż jedno z obsługiwanych zdarzeń. Na przykład naciśnięcie przycisku Fn na klawiaturze Surface powoduje jednoczesne wywołanie zdarzeń SystemFunctionButtonPressed, SystemFunctionLockChanged i SystemFunctionLockIndicatorChanged.
W tym pierwszym fragmencie kodu po prostu dołączamy wymagane przestrzenie nazw i określamy niektóre obiekty globalne, w tym obiekty DispatcherQueue i DispatcherQueueController do zarządzania wątkiem SystemButtonEventController.
Następnie określamy zwracane tokeny zdarzeń podczas rejestrowania delegatów do obsługi zdarzeń SystemButtonEventController.
namespace winrt { using namespace Windows::System; using namespace Windows::UI::Input; } ... // Declare related members winrt::DispatcherQueueController _queueController; winrt::DispatcherQueue _queue; winrt::SystemButtonEventController _controller; winrt::event_token _fnKeyDownToken; winrt::event_token _fnKeyUpToken; winrt::event_token _fnLockToken;Określamy również token zdarzenia dla zdarzenia SystemFunctionLockIndicatorChanged wraz z wartością logiczną, aby wskazać, czy aplikacja jest w trybie uczenia (gdzie użytkownik po prostu próbuje eksplorować klawiaturę bez wykonywania żadnych funkcji).
winrt::event_token _fnLockIndicatorToken; bool _isLearningMode = false;Ten trzeci fragment zawiera odpowiednie delegaty do obsługi zdarzeń dla każdego zdarzenia obsługiwanego przez obiekt SystemButtonEventController.
Każdy program obsługi zdarzeń ogłasza zdarzenie, które wystąpiło. Ponadto program obsługi FunctionLockIndicatorChanged kontroluje również, czy aplikacja jest w trybie "Learning" (
_isLearningMode= true), co uniemożliwia propagację zdarzenia do innych obsługi i umożliwia użytkownikowi eksplorowanie funkcji klawiatury bez faktycznego wykonywania czynności.void SetupSystemButtonEventController() { // Create dispatcher queue controller and dispatcher queue _queueController = winrt::DispatcherQueueController::CreateOnDedicatedThread(); _queue = _queueController.DispatcherQueue(); // Create controller based on new created dispatcher queue _controller = winrt::SystemButtonEventController::CreateForDispatcherQueue(_queue); // Add Event Handler for each different event _fnKeyDownToken = _controller->FunctionButtonPressed( [](const winrt::SystemButtonEventController& /*sender*/, const winrt:: FunctionButtonEventArgs& args) { // Mock function to read the sentence "Fn button is pressed" PronounceFunctionButtonPressedMock(); // Set Handled as true means this event is consumed by this controller // no more targets will receive this event args.Handled(true); }); _fnKeyUpToken = _controller->FunctionButtonReleased( [](const winrt::SystemButtonEventController& /*sender*/, const winrt:: FunctionButtonEventArgs& args) { // Mock function to read the sentence "Fn button is up" PronounceFunctionButtonReleasedMock(); // Set Handled as true means this event is consumed by this controller // no more targets will receive this event args.Handled(true); }); _fnLockToken = _controller->FunctionLockChanged( [](const winrt::SystemButtonEventController& /*sender*/, const winrt:: FunctionLockChangedEventArgs& args) { // Mock function to read the sentence "Fn shift is locked/unlocked" PronounceFunctionLockMock(args.IsLocked()); // Set Handled as true means this event is consumed by this controller // no more targets will receive this event args.Handled(true); }); _fnLockIndicatorToken = _controller->FunctionLockIndicatorChanged( [](const winrt::SystemButtonEventController& /*sender*/, const winrt:: FunctionLockIndicatorChangedEventArgs& args) { // Mock function to read the sentence "Fn lock indicator is on/off" PronounceFunctionLockIndicatorMock(args.IsIndicatorOn()); // In learning mode, the user is exploring the keyboard. They expect the program // to announce what the key they just pressed WOULD HAVE DONE, without actually // doing it. Therefore, handle the event when in learning mode so the key is ignored // by the system. args.Handled(_isLearningMode); }); }
Zobacz także
Windows developer