You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:55:37