在Windows 10 C#UWP通用Windows应用程序中获取用户名
在Windows10UWP的世界里,我正在努力完成另一项简单的任务 我只需要当前Windows用户的用户名。用户名在UWP中不是一个东西。到目前为止,再多的网络搜索也帮不上什么忙。因此我在这里发帖在Windows 10 C#UWP通用Windows应用程序中获取用户名,c#,windows,uwp,C#,Windows,Uwp,在Windows10UWP的世界里,我正在努力完成另一项简单的任务 我只需要当前Windows用户的用户名。用户名在UWP中不是一个东西。到目前为止,再多的网络搜索也帮不上什么忙。因此我在这里发帖 有人吗?这现在是不可能的吗?正如我所看到的,有一个用户类可用(UWP): 试试这个: var users = await User.FindAllAsync(UserType.LocalUser); var name = await users.FirstOrDefault().GetProperty
有人吗?这现在是不可能的吗?正如我所看到的,有一个
用户类可用(UWP):
试试这个:
var users = await User.FindAllAsync(UserType.LocalUser);
var name = await users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.AccountName);
将“用户帐户信息”功能添加到Package.appxmanifest中的应用程序中
使用以下代码获取用户显示名称:
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
IReadOnlyList<User> users = await User.FindAllAsync();
var current = users.Where(p => p.AuthenticationStatus == UserAuthenticationStatus.LocallyAuthenticated &&
p.Type == UserType.LocalUser).FirstOrDefault();
// user may have username
var data = await current.GetPropertyAsync(KnownUserProperties.AccountName);
string displayName = (string)data;
//or may be authinticated using hotmail
if(String.IsNullOrEmpty(displayName))
{
string a = (string)await current.GetPropertyAsync(KnownUserProperties.FirstName);
string b = (string)await current.GetPropertyAsync(KnownUserProperties.LastName);
displayName = string.Format("{0} {1}", a, b);
}
text1.Text = displayName;
}
private async void页面\u已加载(对象发送方,RoutedEventArgs e)
{
IReadOnlyList users=wait User.findallalsync();
var current=users.Where(p=>p.AuthenticationStatus==UserAuthenticationStatus.LocallyAuthenticated&&
p、 Type==UserType.LocalUser).FirstOrDefault();
//用户可能有用户名
var data=await current.GetPropertyAsync(KnownUserProperties.AccountName);
字符串displayName=(字符串)数据;
//或者可以使用hotmail进行身份验证
if(String.IsNullOrEmpty(displayName))
{
字符串a=(字符串)等待current.GetPropertyAsync(KnownUserProperties.FirstName);
字符串b=(字符串)等待current.GetPropertyAsync(KnownUserProperties.LastName);
displayName=string.Format(“{0}{1}”,a,b);
}
text1.Text=显示名称;
}
您还可以通过方法see拾取启动应用程序的用户
不过,您仍然需要在清单中声明用户信息功能
快速示例(省略号表示不适用的生成代码):
这将为您提供完整的域\用户名。您可以使用pinvoke吗?小蚱蜢:是的,平沃克可以工作。现在也看看下面的其他答案。谢谢,你好,杰里米。是的,先找到那一页。恐怕没有帮我。pinvoke方法第一次奏效。谢谢你,但效果不好。变量名=。。。直接退出并在之后的行上结束进一步的处理。我没有测试它,但它是微软的官方样本。希望能有帮助。也许Marcinax的答案会有用。User.FindAllAsync(UserType.LocalUser)返回null,因此下一行代码将启动(async,因此仅退出)。Package.appxmanifest中的功能中是否有需要勾选的内容?用户必须提供获取此信息的许可,清单必须包含uap:userAccountInformation功能。当我尝试使用它时,该功能一直在GetPropertyAsyc上阻塞var users=User.findalsync(UserType.LocalUser).AsTask().Result;var name=users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.AccountName).AsTask().Result.ToString();返回名称代码>为我工作。要得到用户名需要做很多工作。MaladețSireoja,merge codu'I不清楚这个答案。此代码中的任何内容都不限于当前用户。相反,它加载系统中可能登录的所有本地用户,然后只显示第一个本地用户。Windows一次允许多个用户(即:快速用户切换、终端服务、其他情况)。我在这里看不到任何东西可以保证这些情况下的正确用户。您好,我还需要在我的UWP应用程序中获取当前用户,但我将得到与命令行“whoami”(域名)相同的结果“耦合”。可能吗?我基于@Sergiu Cojocaru给出的代码和UserInfo上的官方示例,但这似乎不可能。。。我在另一个主题中问了这个问题,如果你需要更多的细节:添加到@slayernoah的评论中。在Package.appxmanifest中,确保在
之间添加
。这适用于windows 10应用程序,您必须添加此应用程序。但是,一旦添加了上述代码(Sergui的代码)就可以正常工作了。呸,传入的用户是空的。
sealed partial class App : Application
{
...
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
User currentUser = e.User;
...
}
...
}
// get username
public string UserNameStr { get; set; } = WindowsIdentity.GetCurrent().Name;