如何获取当前登录的windows用户名?
在win7里,可以有多个explorer同时运行,那通过explorer来获取当前正在使用的用户名就不准确了,GetUserName()也不行,应为我这个是服务,WTSQuerySessionInformation同时也不适用,许多的系统都不支持,各位还有什么好办法么?
------解决方案--------------------
int gethostname(
char* name,
int namelen
);
------解决方案--------------------
void Get_LogUser(char *lpUserName,DWORD nNameLen)
{
DWORD dwProcessID = name_2_pid("explorer.exe");
if (dwProcessID == 0)
return ;
BOOL fResult = FALSE;
HANDLE hProc = NULL;
HANDLE hToken = NULL;
TOKEN_USER *pTokenUser = NULL;
__try
{
// Open the process with PROCESS_QUERY_INFORMATION access
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID);
if (hProc == NULL)
{
__leave;
}
fResult = OpenProcessToken(hProc, TOKEN_QUERY, &hToken);
if(!fResult)
{
__leave;
}
DWORD dwNeedLen = 0;
fResult = GetTokenInformation(hToken,TokenUser, NULL, 0, &dwNeedLen);
if (dwNeedLen > 0)
{
pTokenUser = (TOKEN_USER*)new BYTE[dwNeedLen];
fResult = GetTokenInformation(hToken,TokenUser, pTokenUser, dwNeedLen, &dwNeedLen);
if (!fResult)
{
__leave;
}
}
else
{
__leave;
}
SID_NAME_USE sn;
TCHAR szDomainName[MAX_PATH];
DWORD dwDmLen = MAX_PATH;
fResult = LookupAccountSid(NULL, pTokenUser->User.Sid, lpUserName, &nNameLen,
szDomainName, &dwDmLen, &sn);
}
__finally
{
if (hProc)
::CloseHandle(hProc);
if (hToken)
::CloseHandle(hToken);
if (pTokenUser)
delete[] (char*)pTokenUser;
}
}
------解决方案--------------------
我的是win7系统 你进cmd 然后输入 set username 就显示了..
在win7里,可以有多个explorer同时运行,那通过explorer来获取当前正在使用的用户名就不准确了,GetUserName()也不行,应为我这个是服务,WTSQuerySessionInformation同时也不适用,许多的系统都不支持,各位还有什么好办法么?
------解决方案--------------------
int gethostname(
char* name,
int namelen
);
------解决方案--------------------
void Get_LogUser(char *lpUserName,DWORD nNameLen)
{
DWORD dwProcessID = name_2_pid("explorer.exe");
if (dwProcessID == 0)
return ;
BOOL fResult = FALSE;
HANDLE hProc = NULL;
HANDLE hToken = NULL;
TOKEN_USER *pTokenUser = NULL;
__try
{
// Open the process with PROCESS_QUERY_INFORMATION access
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID);
if (hProc == NULL)
{
__leave;
}
fResult = OpenProcessToken(hProc, TOKEN_QUERY, &hToken);
if(!fResult)
{
__leave;
}
DWORD dwNeedLen = 0;
fResult = GetTokenInformation(hToken,TokenUser, NULL, 0, &dwNeedLen);
if (dwNeedLen > 0)
{
pTokenUser = (TOKEN_USER*)new BYTE[dwNeedLen];
fResult = GetTokenInformation(hToken,TokenUser, pTokenUser, dwNeedLen, &dwNeedLen);
if (!fResult)
{
__leave;
}
}
else
{
__leave;
}
SID_NAME_USE sn;
TCHAR szDomainName[MAX_PATH];
DWORD dwDmLen = MAX_PATH;
fResult = LookupAccountSid(NULL, pTokenUser->User.Sid, lpUserName, &nNameLen,
szDomainName, &dwDmLen, &sn);
}
__finally
{
if (hProc)
::CloseHandle(hProc);
if (hToken)
::CloseHandle(hToken);
if (pTokenUser)
delete[] (char*)pTokenUser;
}
}
------解决方案--------------------
我的是win7系统 你进cmd 然后输入 set username 就显示了..