当程序以管理员权限启动后,如果需要获取当前系统登录非管理员用户名,大部分方法(如 GetUserName)获取到的都是管理员的用户名,以下是获取当前登录用户方法。直接上代码:
#include <windows.h>
#include <WtsApi32.h>
#pragma comment(lib, "WtsApi32.lib")
#include <string>
using namespace std;
// 获取当前登录用户
bool GetSessionUserName(string& strUserName)
{
DWORD dwSessionId = WTSGetActiveConsoleSessionId();
LPTSTR pBuffer = NULL;
DWORD dwBufferLen;
BOOL bRes = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTSUserName, &pBuffer, &dwBufferLen);
if (bRes == FALSE)
{
return false;
}
strUserName = pBuffer;
WTSFreeMemory(pBuffer);
return true;
}
int main()
{
string strUser;
if (GetSessionUserName(strUser))
{
printf("当前登录用户:%s\n", strUser.c_str());
}
else
{
printf("获取当前登录用户失败\n");
}
system("pause");
return 0;
}