¡Hola  a todos! Un detalle muy bueno en las aplicaciones puede ser identificar al usuario que ha iniciado sesión en el sistema para mostrar su información básica. Además en aplicaciones más complejas queremos poder obtener más información.

Introducción

En Windows 8.1 podíamos utilizar la clase UserInformation. Pero a partir de Windows 10 esta clase deja de devolvernos información y tenemos que usar la clase User.

El funcionamiento es sencillo: obtenemos todos los usuarios del sistema y luego podemos obtener cierta información de cada uno de ellos.

Vamos a ver un ejemplo en el que obtenemos toda la información posible de un usuario y veremos que la información disponible varía en función del tipo de usuario: usuario local, Microsoft Account, usuario dentro de dominio, etc.

Como siempre el código del ejemplo lo podéis encontrar en Github.

Antes de empezar

Importante: Es necesario marcar la Capability de User Account Information en el manifiesto.

capability

Obtener los usuarios

La clase User nos ofrece un método para obtener los usuarios. Una vez los tenemos filtramos para quedarnos con el primer usuario local que esté autenticado de forma local. Con UserType y UserAuthenticationStatus podemos filtrar a los usuarios remotos o no autenticados.

Obtener información del usuario

Para obtener información del usuario debemos de llamar al método GetPropertyAsync pasándole la key de la propiedad que queremos obtener. En la clase KnownUserProperties tenemos propiedades estáticas con todas las Key de las propiedades que podemos obtener.

Por ejemplo para obtener el first name:

Nota: Existe otro método llamado GetPropertiesAsync, al que le pasamos un listado de Key, de las propiedades que queremos para obtenerlas todas con un sólo método.

Algunas propiedades que podemos obtener son: First Name, Last Name, Display Name, Domain Name, etc.

Obtener la imagen del usuario

Una vez tenemos el usuario también podemos obtener la imagen de su cuenta. Para ellos tenemos que usar el método GetPictureAsync pasándole un UserPictureSize.

Y una vez la obtenemos ya podemos mostrarla:
[sourcecode language=”csharp”]
if (streamReference != null)
{
IRandomAccessStream stream = await streamReference.OpenReadAsync();
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(stream);
AccountPicture.ImageSource = bitmapImage;
}
[/sourcecode]

Resultado

Pues bien, ahora es cuestión de ver cuánta información somos capaces de obtener según el tipo de usuario que haya iniciado sesión en la máquina.

Usuario Local

Con un usuario local la información que obtengo es muy poca. En mi caso sólo he obtenido el Display Name, además de la imagen por defecto del usuario.

Local

Microsoft Account

Si inicio sesión con mi Microsoft Account ya podemos ver First Name y Last Name. Además de ver la imagen de mi cuenta.

Microsoft Account

Estando dentro de un dominio

Como podemos ver en este caso hemos logrado obtener el nombre de dominio.

Capture

Conclusiones

En Windows 10 se ha dejado de dar soporte a UserInformation y nos ha tocado migrarnos a una nueva forma de obtener información del usuario. Como hemos podido ver, obtener información básica del usuario a través de la clase User es bastante sencillo. Pero tenemos que tener en cuenta que mucha de esta información no va a estar disponible y hacer que nuestras aplicaciones sepan responder ante esa falta de información.

Referencias

¡Nos vemos en el futuro!

Sergio Gallardo (@maktub82)