【发布时间】:2015-04-24 16:32:33
【问题描述】:
我有一个提示用户名的简单 C++ 程序
#include <windows.h>
#include <Lmcons.h>
#include <winbase.h>
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t username[UNLEN + 1];
DWORD username_len = UNLEN + 1;
::GetUserName(username, &username_len);
MessageBox(NULL, username, NULL, 1);
return 1;
}
GetUserName() 在管理员帐户中按预期执行,这意味着打印真实用户名。
但是,当在非管理员帐户中以管理员身份运行时,我得到的是管理员名称,而不是真正的登录用户。
我相信这种行为是意料之中的,因为它记录在 GetUserName():
如果当前线程正在模拟另一个客户端,GetUserName 函数会返回该线程正在模拟的客户端的用户名。
问题
有没有办法获得真正的登录用户(非管理员用户),即使进程以管理员身份运行?
【问题讨论】:
-
上述“解决方案”不起作用。这样做:stackoverflow.com/questions/5218778/…
-
@UserX,该问题询问有关从服务获取当前登录用户的问题。这个问题询问如何从交互式应用程序中获取当前登录的用户。它们是不同的问题,需要不同的解决方案。
标签: c++ windows-7 windows-xp windows-vista