2013-11-21 29 views
5

Muszę zaimplementować określone funkcje tylko wtedy, gdy klawiatura jest przymocowana do powierzchni. Czy istnieje sposób, w jaki mogę wykryć, kiedy klawiatura powierzchniowa jest podłączona lub usunięta?Jak wykryć, czy klawiatura powierzchni jest dołączona?

Próbowałem ten kod na powierzchni:

function getKeyboardCapabilities() 
{ 
    var keyboardCapabilities = new Windows.Devices.Input.KeyboardCapabilities(); 
    console.log(keyboardCapabilities.keyboardPresent); 

} 

Wynik był zawsze „1” nawet gdy klawiatura nie był podłączony.

+0

Rozumiem, że można się dowiedzieć, czy został załączony, ale nie, czy jest on obecnie dołączony. Spójrz na 'KeyboardCapabilities.KeyboardPresent' – WiredPrairie

+0

@ WiredPrairie Próbowałem użyć' KeyboardCapabilities.keyboardPresent' na komputerze z fizyczną klawiaturą, a wynikiem było '1', co jest dobre. Jednak ten sam kod na powierzchni zawsze zwrócił "1", nawet gdy klawiatura nie była podłączona. – Stefania

+0

Niestety, myślę, że tak właśnie działa. Powierzchnia zawsze zgłasza prawdę, jeśli została dołączona w pewnym momencie. – WiredPrairie

Odpowiedz

1

Użyłem tego kodu, aby określić, kiedy klawiatura jest podłączona do powierzchni:

var keyboardWatcher = (function() { 
    // private 
    var keyboardState = false; 

    var watcher = Windows.Devices.Enumeration.DeviceInformation.createWatcher(); 
    watcher.addEventListener("added", function (devUpdate) { 
    // GUID_DEVINTERFACE_KEYBOARD 
     if ((devUpdate.id.indexOf('{884b96c3-56ef-11d1-bc8c-00a0c91405dd}') != -1) && (devUpdate.id.indexOf('MSHW0007') == -1) ) { 
      if (devUpdate.properties['System.Devices.InterfaceEnabled'] == true) { 
       // keyboard is connected 
       keyboardState = true; 
      } 
     } 
    }); 
    watcher.addEventListener("updated", function (devUpdate) { 

     if (devUpdate.id.indexOf('{884b96c3-56ef-11d1-bc8c-00a0c91405dd}') != -1) { 
      if (devUpdate.properties['System.Devices.InterfaceEnabled']) { 
       // keyboard is connected 
       keyboardState = true; 
      } 
      else { 
       // keyboard disconnected 
       keyboardState = false; 
      } 
     } 
    }); 

    watcher.start(); 

    // public 
    return { 
     isAttached: function() { 
      return keyboardState; 
     } 
    } 

})(); 

Następnie zadzwonić KeyboardWatcher.isAttached() kiedy trzeba sprawdzić stan klawiatury.

0

Nie mogłem znaleźć dobrego sposobu na wykrycie, czy klawiatura jest podłączona, więc zamiast tego wykrywam, czy jestem w trybie tabletu lub na komputerze.

 bool bIsDesktop = false; 

     var uiMode = UIViewSettings.GetForCurrentView().UserInteractionMode; 
     if (uiMode == Windows.UI.ViewManagement.UserInteractionMode.Mouse)   // Typical of Desktop 
      bIsDesktop = true; 

Uwaga druga możliwa wartość uiMode jest Windows.UI.ViewManagement.UserInteractionMode.Touch.