我如何获得进程所有者(执行我的程序的用户)的用户名?
GetUserName()
例:
char user_name[UNLEN+1]; DWORD user_name_size = sizeof(user_name); if (GetUserName(user_name, &user_name_size)) cout << "Your user name is: " << user_name << endl; else /* Handle error */
看看getpwuid :
getpwuid()函数将在用户数据库中搜索具有匹配的uid的条目。
getpwuid()函数将返回一个指向结构密码的指针
struct passwd
将包含char *pw_name
。
使用getuid
获取用户标识。
这是特定于操作系统的。 在Windows上,使用GetUserName 。 在unix上,使用getuid 。
在Windows上,一个线程可以被模拟,一个进程不能。 要获得流程所有者,您应该在流程标记上使用TokenUser infoclass调用GetTokenInformation ,这将为您提供一个SID,此SID可以转换为具有LookupAccountSid的用户名。 如果你不关心线程vs进程,GetUserName()很好。
在Mac OSX上:
getenv("USER");
在Linux上:
getenv("USERNAME");
这不是一个C + +相关的问题。 使用UNIX系统时,可以在环境变量中找到信息(不是100%确定的)。 你也可以在这些系统上使用'id'程序。
一般来说,最快的方法是进行平台相关的内核/ API调用。
在cmd.exe下的窗口中,USERNAME环境变量保存用户名(这也是不实际的信息)。 在WINAPI文档中搜索精确。