Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Identify input devices

Identify the input devices connected to a Windows app device and identify their capabilities and attributes.

Important APIs: Windows.Devices.Input, Windows.UI.Input, Windows.UI.Xaml.Input

Retrieve mouse properties

The Windows.Devices.Input namespace contains the MouseCapabilities class used to retrieve the properties exposed by one or more connected mice. Just create a new MouseCapabilities object and get the properties you're interested in.

Note  The values returned by the properties discussed here are based on all detected mice: Boolean properties return non-zero if at least one mouse supports a specific capability, and numeric properties return the maximum value exposed by any one mouse.

The following code uses a series of TextBlock elements to display the individual mouse properties and values.

private void GetMouseProperties()
{
 MouseCapabilities mouseCapabilities = new Windows.Devices.Input.MouseCapabilities();
 MousePresent.Text = mouseCapabilities.MousePresent != 0 ? "Yes" : "No";
 VertWheel.Text = mouseCapabilities.VerticalWheelPresent != 0 ? "Yes" : "No";
 HorzWheel.Text = mouseCapabilities.HorizontalWheelPresent != 0 ? "Yes" : "No";
 SwappedButtons.Text = mouseCapabilities.SwapButtons != 0 ? "Yes" : "No";
 NumButtons.Text = mouseCapabilities.NumberOfButtons.ToString();
}

Retrieve keyboard properties

The Windows.Devices.Input namespace contains the KeyboardCapabilities class used to retrieve whether a keyboard is connected. Just create a new KeyboardCapabilities object and get the KeyboardPresent property.

The following code uses a TextBlock element to display the keyboard property and value.

private void GetKeyboardProperties()
{
 KeyboardCapabilities keyboardCapabilities = new Windows.Devices.Input.KeyboardCapabilities();
 KeyboardPresent.Text = keyboardCapabilities.KeyboardPresent != 0 ? "Yes" : "No";
}

Retrieve touch properties

The Windows.Devices.Input namespace contains the TouchCapabilities class used to retrieve whether any touch digitizers are connected. Just create a new TouchCapabilities object and get the properties you're interested in.

Note  The values returned by the properties discussed here are based on all detected touch digitizers: Boolean properties return non-zero if at least one digitizer supports a specific capability, and numeric properties return the maximum value exposed by any one digitizer.

The following code uses a series of TextBlock elements to display the touch properties and values.

private void GetTouchProperties()
{
 TouchCapabilities touchCapabilities = new Windows.Devices.Input.TouchCapabilities();
 TouchPresent.Text = touchCapabilities.TouchPresent != 0 ? "Yes" : "No";
 Contacts.Text = touchCapabilities.Contacts.ToString();
}

Retrieve pointer properties

The Windows.Devices.Input namespace contains the PointerDevice class used to retrieve whether any detected devices support pointer input (touch, touchpad, mouse, or pen). Just create a new PointerDevice object and get the properties you're interested in.

Note  The values returned by the properties discussed here are based on all detected pointer devices: Boolean properties return non-zero if at least one device supports a specific capability, and numeric properties return the maximum value exposed by any one pointer device.

The following code uses a table to display the properties and values for each pointer device.

private void GetPointerDevices()
{
 IReadOnlyList<PointerDevice> pointerDevices = Windows.Devices.Input.PointerDevice.GetPointerDevices();
 int gridRow = 0;
 int gridColumn = 0;

 for (int i = 0; i < pointerDevices.Count; i++)
 {
 // Pointer device type.
 TextBlock textBlock1 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock1);
 textBlock1.Text = (i + 1).ToString() + " Pointer Device Type:";
 Grid.SetRow(textBlock1, gridRow);
 Grid.SetColumn(textBlock1, gridColumn);

 TextBlock textBlock2 = new TextBlock();
 textBlock2.Text = pointerDevices[i].PointerDeviceType.ToString();
 Grid_PointerProps.Children.Add(textBlock2);
 Grid.SetRow(textBlock2, gridRow++);
 Grid.SetColumn(textBlock2, gridColumn + 1);

 // Is external?
 TextBlock textBlock3 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock3);
 textBlock3.Text = (i + 1).ToString() + " Is External?";
 Grid.SetRow(textBlock3, gridRow);
 Grid.SetColumn(textBlock3, gridColumn);

 TextBlock textBlock4 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock4);
 textBlock4.Text = pointerDevices[i].IsIntegrated.ToString();
 Grid.SetRow(textBlock4, gridRow++);
 Grid.SetColumn(textBlock4, gridColumn + 1);

 // Maximum contacts.
 TextBlock textBlock5 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock5);
 textBlock5.Text = (i + 1).ToString() + " Max Contacts:";
 Grid.SetRow(textBlock5, gridRow);
 Grid.SetColumn(textBlock5, gridColumn);

 TextBlock textBlock6 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock6);
 textBlock6.Text = pointerDevices[i].MaxContacts.ToString();
 Grid.SetRow(textBlock6, gridRow++);
 Grid.SetColumn(textBlock6, gridColumn + 1);

 // Physical device rectangle.
 TextBlock textBlock7 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock7);
 textBlock7.Text = (i + 1).ToString() + " Physical Device Rect:";
 Grid.SetRow(textBlock7, gridRow);
 Grid.SetColumn(textBlock7, gridColumn);

 TextBlock textBlock8 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock8);
 textBlock8.Text = pointerDevices[i].PhysicalDeviceRect.X.ToString() + "," +
 pointerDevices[i].PhysicalDeviceRect.Y.ToString() + "," +
 pointerDevices[i].PhysicalDeviceRect.Width.ToString() + "," +
 pointerDevices[i].PhysicalDeviceRect.Height.ToString();
 Grid.SetRow(textBlock8, gridRow++);
 Grid.SetColumn(textBlock8, gridColumn + 1);

 // Screen rectangle.
 TextBlock textBlock9 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock9);
 textBlock9.Text = (i + 1).ToString() + " Screen Rect:";
 Grid.SetRow(textBlock9, gridRow);
 Grid.SetColumn(textBlock9, gridColumn);

 TextBlock textBlock10 = new TextBlock();
 Grid_PointerProps.Children.Add(textBlock10);
 textBlock10.Text = pointerDevices[i].ScreenRect.X.ToString() + "," +
 pointerDevices[i].ScreenRect.Y.ToString() + "," +
 pointerDevices[i].ScreenRect.Width.ToString() + "," +
 pointerDevices[i].ScreenRect.Height.ToString();
 Grid.SetRow(textBlock10, gridRow++);
 Grid.SetColumn(textBlock10, gridColumn + 1);

 gridColumn += 2;
 gridRow = 0;
 }

Related articles

Samples

Archive samples


Feedback

Was this page helpful?

Additional resources