2013-11-21 16 views
5

キーボードが表面に取り付けられている場合にのみ、特定の機能を実装する必要があります。表面のキーボードが取り付けられたり取り外されたりしたときに検出できる方法はありますか?表面キーボードが取り付けられているかどうかを検出する方法は?

私は表面上でこのコードを試してみました:

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

} 

結果は常にキーボードが接続されていなかったとしても「1」でした。

+0

私が理解していることは、添付されているかどうかを知ることができますが、現在添付されているかどうかはわかりません。 'KeyboardCapabilities.KeyboardPresent'を見てください – WiredPrairie

+0

@WiredPrairie物理キーボードを持つコンピュータで' KeyboardCapabilities.keyboardPresent'を使用しようとしましたが、結果は '1'でした。しかし、Surface上の同じコードは、キーボードが接続されていなくても常に「1」を返しました。 – Stefania

+0

残念ながら、私はそれがうまくいくと思う。サーフェスは、ある時点でアタッチされている場合は常にtrueを返します。 – WiredPrairie

答えて

1

私はキーボードが表面に接続されたときに識別するために、このコードを使用:

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; 
     } 
    } 

})(); 

次にあなたがキーボードの状態を確認する必要があるたびKeyboardWatcher.isAttached()を呼び出します。

0

キーボードが接続されているかどうかを検出する方法が見つからないため、代わりにタブレットモードまたはデスクトップモードになっているかどうかを検出します。

 bool bIsDesktop = false; 

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

uiModeの他の可能な値は、Windows.UI.ViewManagement.UserInteractionMode.Touchです。

関連する問題