使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件

Posted

技术标签:

【中文标题】使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件【英文标题】:Get logged on user's name or email on Windows 8 using C++ and WinAPIs 【发布时间】:2012-08-13 02:44:34 【问题描述】:

在 Windows 7 上检索已登录用户的名称,我可以这样做:

LPTSTR pUserName = NULL;
DWORD dwcbSzUserName = 0;

//'dwSessID' = user session ID
if(WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessID, WTSUserName, &pUserName, &dwcbSzUserName))

    //Got user name in 'pUserName'


if(pUserName)
    WTSFreeMemory(pUserName);

但在 Windows 8 上,当实际用户的名称是“John A. Doe”时,它会返回一些缩写名称,例如“john_000”。

那么,使用 WinAPI 在 Windows 8 上使用 C++ 检索登录用户的名称(可能还有他们的电子邮件)的方法是什么,如登录屏幕上显示的那样?

【问题讨论】:

How to get logged-in user's full name in windows?的可能重复 【参考方案1】:

您可以尝试NetUserGetInfo 和USER_INFO_23 来获取全名。

基本上是这样的:

    //Got user name in 'pUserName'
    NetUserGetInfo(NULL, pUserName, 23, my_USER_INFO_23);
    //Got display name in my_USER_INFO_23.usri23_full_name

【讨论】:

很好,这是获取完整用户名的方法。但是电子邮件呢? 对不起,不知道。您是在谈论检索链接到用户帐户(如果有)的 Windows Live ID 吗? 我认为用户 ID 与 Windows 8 上的 Live ID 相关联。如果您使用的是 Windows 8,它会在登录屏幕上的用户图标旁边显示为电子邮件。但这没关系,只要我有完整的用户名就可以了。谢谢! Signing in to Windows 8 with a Windows Live ID

以上是关于使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WinAPI 和 C++ 从 Windows 系统上的服务通知客户端应用程序?

如何使用 C++ 和 winAPI 检查目录是不是存在 [重复]

C++ WinAPI:处理长文件路径/名称

简单的匿名管道 - 您使用啥包装器模型? (WinAPI, C++)

鼠标状态winapi

c++ winapi线程