C++ 如何获取Windows在登录屏幕上显示的用户帐户列表?

C++ 如何获取Windows在登录屏幕上显示的用户帐户列表?,c++,windows,C++,Windows,我正在使用NetQueryDisplayInformation(我已经尝试了NetUserEnum函数)获取本地计算机上的用户帐户集。我可以通过这种方式获得所有帐户,但我只想要与实际用户关联的帐户,而不是用于软件更新的隐藏帐户 在阅读了相关的结构和内容之后,我发现没有什么可以让我过滤到我需要的账户 理想情况下,有人会有一个简单可靠的解决方案: 不涉及使用未记录的注册表项 不依赖于枚举磁盘上的用户文件夹 我不会试图建立一个详尽的非真实用户帐户列表 出于技术原因,WMI不是一个选项 有什么想法吗 [

我正在使用NetQueryDisplayInformation(我已经尝试了NetUserEnum函数)获取本地计算机上的用户帐户集。我可以通过这种方式获得所有帐户,但我只想要与实际用户关联的帐户,而不是用于软件更新的隐藏帐户

在阅读了相关的结构和内容之后,我发现没有什么可以让我过滤到我需要的账户

理想情况下,有人会有一个简单可靠的解决方案:

  • 不涉及使用未记录的注册表项
  • 不依赖于枚举磁盘上的用户文件夹
  • 我不会试图建立一个详尽的非真实用户帐户列表
  • 出于技术原因,WMI不是一个选项
  • 有什么想法吗

    [很久以后]
    得到了答案,但不在这里-只需为每个用户枚举组。“真人”帐户将是管理员、超级用户、用户、来宾中的一个或多个成员。

    您可以使用该功能。它应该返回系统上所有用户帐户的列表。我没有亲自使用过这个函数,所以我不能提供任何精彩的代码示例,但是MSDN信息听起来像是您正在寻找的

    您可以使用NetQueryDisplayInformation API,并结合按位检查用户信息标志

    我有完全相同的要求,所以我编写了示例代码(从MSDN组查询中修改)

    我使用的用户标志是:

    UF_NORMAL_ACCOUNT
    UF_ACCOUNTDISABLE
    UF_PASSWD_NOTREQD ---> this ensure we get Human account, Human account always requires password.
    

    工作代码位于:

    此信息在usri1_标志字段中不可用吗?阅读文档,尝试一些位组合,但没有任何效果。仍然有太多的用户。希望这将帮助你找到正确的地方看
    HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList\
    该注册表项是DWORD。如果是0,用户将不会出现在欢迎屏幕上谢谢@JimR,我是该屏幕的负责人。问题是,像“Updateus”这样的非人类用户没有条目,但仍然保持沉默。已经尝试过了,还有非常类似的NetQueryDisplayInformation。它们确实列出了所有用户,但不幸的是,实际显示在Windows登录屏幕上的用户集只是这些方法提供的用户集的一个子集。从本质上说,我有太多的数据,我试图将其缩减为“真正的人类”用户;没有那么担心。我主要关心的是不要通过显示不熟悉的用户名(如“autoupdater”等)来迷惑用户。事实证明,秘密在于只显示至少属于管理员、超级用户、用户或来宾之一的用户