C 如何获取当前用户的用户名?

C 如何获取当前用户的用户名?,c,windows,winapi,C,Windows,Winapi,我想在Windows中使用C编程访问用户名,并使用该名称创建特定文件的路径,如“C:\users\john\Roaming…..等等”。因此,对于每个系统用户名,例如“john”都是不同的。帮助我在运行时查找用户名。在windows上获取用户名的函数是 ,可能也会对您有所帮助。#包括 #include <stdio.h> int main(void) { printf("%s\n", getenv("USERPROFILE")); // Print user's hom

我想在Windows中使用C编程访问用户名,并使用该名称创建特定文件的路径,如“C:\users\john\Roaming…..等等”。因此,对于每个系统用户名,例如“john”都是不同的。帮助我在运行时查找用户名。

在windows上获取用户名的函数是

,可能也会对您有所帮助。

#包括
#include  <stdio.h>

int main(void)
{
    printf("%s\n", getenv("USERPROFILE"));  // Print user's home directory.
    return 0;
}
内部主(空) { printf(“%s\n”,getenv(“USERPROFILE”);//打印用户的主目录。 返回0; }

要获取用户名而不是主路径,请将
USERPROFILE
替换为
USERNAME

,您可以使用以下代码获取用户名

    #include <stdlib.h>

    void main(void)
    {
        //following gets the appdata folder
        char szAppData[1024];
        char * szBufer      = 0;
        szBufer = getenv ("APPDATA");
        if (szBufer != NULL)
        {
           strcpy(szBufer , szAppData);
        }

        //following code gets the user name
        char szOSUserName[1024];
        szBufer = getenv ("USERNAME");
        if (szBufer != NULL)
        {
            strcpy(szBufer , szOSUserName);
        }
    }
#包括
真空总管(真空)
{
//下面获取appdata文件夹
char szAppData[1024];
char*szBufer=0;
szBufer=getenv(“APPDATA”);
if(szBufer!=NULL)
{
strcpy(szBufer,szAppData);
}
//下面的代码获取用户名
char szossername[1024];
szBufer=getenv(“用户名”);
if(szBufer!=NULL)
{
strcpy(szBufer,Szossername);
}
}

您在这里寻找的可能更多。该功能允许您查找每个用户的特殊文件夹。这比查询用户名更好,因为主文件夹可能与用户的名称不同

WSTR* location;
HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &location);
if (SUCCEEDED(hr))
{
    // location contains the folder path
    // call CoTaskMemFree to free up the memory once you're done with it
    CoTaskMemFree(location);
}

所谓的已知文件夹列表可用。

%USERNAME%
将提供用户名,但更好的解决方案是将其存储在
%USERPROFILE%\\Desktop\\key.txt
上,至少使其独立于操作系统


更好的解决方案是不在用户的桌面上存储私人信息。或任何地方。

您可以通过以下方式获取当前用户的名称:

#包括
#包括
#包括
int main()
{
字符名[UNLEN+1];
DWORD cch=UNLEN+1;
if(GetUserName(name和cch))
{
char cmd[100+UNLEN+1];
sprintf(cmd,“echo用户名是\%s\”,name);//愚蠢的演示命令
系统(cmd);
}
返回0;
}
如果希望名称采用特定格式,请使用


如果需要获取特殊文件夹(如“我的文档”或“桌面”)的路径,则应使用特殊文件夹功能(如或)。

所有基本Win32 API都是C,GetUserName也是C,为什么说它是
C++
?你是否尝试点击答案中的链接,这不是你的评论中的一个问题。包含函数声明的框的标签式标题确实表示C++。我想MSDN简单地把C和C++混为一谈,这是OP最需要的。要获取每个用户的名称没有多大意义,您只需要获取当前用户的名称,或者?
getenv(“用户名”)
应该这样做。我将其存储在桌面上只是为了测试,而不是真正保存在那里:d此问题标记为C,只有批处理文件应使用环境变量。桌面文件夹可能不在用户配置文件根目录中!我也可以在启动程序之前设置用户名=管理员…@Anders,如果你愿意,你可以删除你自己的硬盘,这与任何事情有什么关系?为什么你会依赖脆弱的环境变量,而你可以使用文档化的函数,而这些函数总是给出正确的结果?您的“%USERPROFILE%\Desktop”示例将为某些人返回错误的路径,它不应是任何已标记答案IMHO的一部分。那又是一个例子。一些构建工具(如SCON)将删除大多数环境变量,并重置%PATH%等内容,以使其具有干净且可重复的环境。
#include <Windows.h>
#include <Lmcons.h>
#include <stdio.h>

int main()
{
    char name[UNLEN + 1];
    DWORD cch = UNLEN + 1;
    if (GetUserName(name, &cch))
    {
        char cmd[100 + UNLEN + 1];
        sprintf(cmd, "echo The username is \"%s\"", name); // Silly demo command
        system(cmd);
    }
    return 0;
}