Win8系の頃はUserInformationっていうクラスで取れてたんですがWin10では非推奨になったんですね。知りませんでした。
ということでWindows.System.Userクラスを使ってユーザー名を取ります。
手順としては、User.FindAllAsyncでユーザーを取得して、GetPropertyAsyncにKnownUserPropertiesを指定して各種情報を取るという手順です。
あと、重要なことですがPackage.appxmanifestの機能で「ユーザーアカウント情報」にチェックを入れないと動きません。重要なことですがPackage.appxmanifestの機能で「ユーザーアカウント情報」にチェックを入れないと動きません。大事なことなので2回。エラーも出ずにするっと動きます。
例えばユーザー名を取りたかったら以下のような感じです。
// ローカルユーザーでローカルで認証されてる人だけ var user = (await User.FindAllAsync(UserType.LocalUser, UserAuthenticationStatus.LocallyAuthenticated)).FirstOrDefault(); if (user == null) { return; } var displayName = await user.GetPropertyAsync(KnownUserProperties.AccountName) as string; if (string.IsNullOrWhiteSpace(displayName)) { displayName = await user.GetPropertyAsync(KnownUserProperties.DisplayName) as string; } if (string.IsNullOrWhiteSpace(displayName)) { displayName = $"{await user.GetPropertyAsync(KnownUserProperties.FirstName)} {await user.GetPropertyAsync(KnownUserProperties.LastName)}"; } // 表示してみる var dialog = new MessageDialog(displayName); await dialog.ShowAsync();
実行すると、ユーザー情報にアクセスしていいかというのを求められるので、それで許可した場合ユーザー情報を取ることが出来ます。
因みに、私のマシンではFindAllAsyncが複数返ってくる条件がわかりませんでした。どういうときに複数返ってくるんだろう…。Server OSで複数ユーザーが同時にログインしてるときなのだろうか。
Win10で同時にサインインしてるだけだと、複数ユーザーは返ってきませんでした。