KeyRoutedEventArgs.DeviceId 属性

定义

获取生成此密钥事件的输入设备的唯一 ID。

使用 DeviceId 区分可以生成关键事件的所有连接的设备,例如多个游戏控制器。

并非所有输入设备都支持 DeviceId。

public:
 property Platform::String ^ DeviceId { Platform::String ^ get(); };
winrt::hstring DeviceId();
public string DeviceId { get; }
var string = keyRoutedEventArgs.deviceId;
Public ReadOnly Property DeviceId As String

属性值

String

Platform::String

winrt::hstring

与密钥事件关联的输入设备的唯一标识符,或不受支持的设备的空字符串。 每次连接同一设备时,都可以为其分配不同的 ID。

Windows 要求

设备系列
Windows 10 Anniversary Edition (在 10.0.14393.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v3.0 中引入)

注解

某些设备(如 Xbox)允许多个用户登录单个交互式会话。 此 DeviceId 属性可用于检索与输入设备关联的特定用户帐户的信息。

在 Windows 10 及更高版本中,通用 Windows 平台 (UWP) 应用在未经用户明确同意的情况下无法访问用户信息 (与 Windows 8 不同,) 默认授予权限。

通用 Windows 平台 (访问用户信息的 UWP) 应用必须声明 userAccountInformation 功能 (Windows.System.UserDeviceAssociation.FindUserFromDeviceIdWindows.System.User.FindAllAsyncUser.GetPropertiesAsync 可用于获取数据) 。

声明此功能后,系统会提示安装应用的用户允许访问其信息。 如果用户允许应用访问信息,该应用将显示在Windows 10设置应用的“隐私”页中, (“设置”>隐私>帐户信息) 。

private async void OnKeyDown(object sender, KeyRoutedEventArgs e)
{
  User user = 
    Windows.System.UserDeviceAssociation.FindUserFromDeviceId(e.DeviceId);
  string displayName = 
    (string)await user.GetPropertyAsync(KnownUserProperties.DisplayName);
  System.Diagnostics.Debug.WriteLine(displayName);
}

有时, OnKeyDown 事件可能不会触发,因为该事件已由控件处理。 在这种情况下,请从 CoreWindowKeyDown 处理程序调用 GetCurrentKeyEventDeviceId 方法,如下所示。

public MainPage()
{
  this.InitializeComponent();
  Windows.UI.Core.CoreWindow.GetForCurrentThread().KeyDown += OnKeyDown;
}

private async void OnKeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
  string device = Windows.UI.Core.CoreWindow.GetForCurrentThread().GetCurrentKeyEventDeviceId();
  User user = Windows.System.UserDeviceAssociation.FindUserFromDeviceId(device);
  string displayName = (string)await user.GetPropertyAsync(KnownUserProperties.DisplayName);
  System.Diagnostics.Debug.WriteLine("OnKeydown:" + displayName);
}

适用于

另请参阅