windows 如何在C++中实际获取用户名

vuktfyat  于 2023-08-07  发布在  Windows
关注(0)|答案(2)|浏览(201)
#include <iostream>
#include <string> 
#include <fstream>
//---
using namespace std;
//---
int main()
{

    string myFile = "theName.txt"; 
    std::string combined = "echo %USERPROFILE% >> C:\\Windows\\Temp\\"+ myFile ;
    system(combined.c_str());

    fstream dog;
    std::string combined2 = "C:\\Windows\\Temp\\" + myFile; 
    dog.open(combined2.c_str());
    char data[100];
    dog >> data; 
    cout << data;

    int cat = 0;
    cin >> cat;
    return 0;
}
//--
//---
//------------------------------------------------------------------------------------

字符串
还可以更好。。尽管从简单的Angular 来看目前最好的方法是...我已经在网上看过了这个问题的几个答案,我学到的很简单……没有命名空间std的编码;显然我刚学会。
看看我该做些什么修改...我明白了...我不仅应该删除文件,而且还应该从字符串中检索显式的用户名...

1mrurvl1

1mrurvl11#

这是一个非常间接和繁琐的方式,如果这样做。您永远不需要调用shell命令来获取任何类型的操作系统信息。
在这种情况下,Windows API调用GetEnvironmentVariable()可以直接检索环境变量:

static const DWORD MAXUNAMELEN = 128 ;
TCHAR username[128] ;

int unamelen = GetEnvironmentVariable( TEXT("USERPROFILE"), username, MAXUNAMELEN ) ;

字符串
或者使用std::getenv()

const char* username = std::getenv( "USERPROFILE" ) ;


这将获得一个 * 环境变量 *,但如果您特别想要当前用户名,即使这样也是不必要的(并且可能不安全),最好使用GetUserName()检索:

TCHAR username[UNLEN + 1] ;
DWORD unamelen = sizeof(username) / sizeof(*username) ;

bool success = GetUserName( username, &unamelen ) ;


请注意,TCHARTEXT等宏是为charwchar_t定义的,具体取决于构建版本是否为Unicode。有更简单的char文本处理API的变体,带有A后缀,如GetUserNameA()GetEnvironmentVariable(),您可以使用它们。
大多数Windows API文档都有示例支持(通常用于多个相关的API)。在这种情况下,以下内容适用:

jljoyd4f

jljoyd4f2#

#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <winbase.h>
#include <lmcons.h>
#include <string>



int wmain()
{
  
    TCHAR username[UNLEN + 1];
    DWORD unamelen = sizeof(username) / sizeof(*username);

    bool success = GetUserName(username, &unamelen);

    std::wcout << username; 
    return true;
}

字符串
太棒了,谢谢!
好吧,在克服了std的命名空间后,再多一点...我也是这么打算的我已经想出了代码使用#Cliffords代码在. cpp.
一个非常基本的,但这工作和感谢!没有人叫我哑巴不要!

相关问题