在Windows 10 C#UWP通用Windows应用程序中获取用户名

在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

在Windows10UWP的世界里,我正在努力完成另一项简单的任务

我只需要当前Windows用户的用户名。用户名在UWP中不是一个东西。到目前为止,再多的网络搜索也帮不上什么忙。因此我在这里发帖


有人吗?这现在是不可能的吗?

正如我所看到的,有一个
用户类可用(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;