如何用C++/Qt6获取Windows10/11在线账户名?代码返回空值求助
获取Windows 10/11在线账户名的替代方案
原代码问题说明
你之前的代码依赖NetUserGetInfo的usri2_full_name字段返回账户名,但该字段仅针对本地账户有效——对于Microsoft在线账户(通过邮箱/微软账号登录的账户),这个字段本身就不会填充有效内容,并非NetUserGetInfo API发生了变更。
简洁解决方案
使用Windows API的GetUserNameExW函数可以直接获取本地/在线账户的显示名称,适配性更强:
#include <windows.h> #include <QLabel> #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); QString displayName; WCHAR buffer[1024]; DWORD bufferSize = sizeof(buffer) / sizeof(WCHAR); // 获取账户显示名称,NameDisplay对应系统中显示的友好名称 if (GetUserNameExW(NameDisplay, buffer, &bufferSize)) { displayName = QString::fromWCharArray(buffer); } else { // 获取失败时降级到本地用户名 DWORD localNameSize = sizeof(buffer) / sizeof(WCHAR); if (GetUserNameW(buffer, &localNameSize)) { displayName = QString::fromWCharArray(buffer); } else { displayName = "Unknown User"; } } qDebug() << "name: " << displayName; QLabel *label = new QLabel("|" + displayName + "|"); label->show(); return a.exec(); }
关键注意点
- Qt项目中需链接
secur32.lib,可在.pro文件添加配置:LIBS += -lsecur32 NameDisplay枚举会返回账户的友好名称(比如在线账户的真实姓名),而非原始邮箱或本地用户名
内容的提问来源于stack exchange,提问作者yalov
相关产品推荐
相关产品推荐

