#include <Windows.h>
#include <WtsApi32.h>
#include <stdio.h>
#include <string>
#include <iostream>
#pragma comment(lib,"Wtsapi32.lib")
//GetSystemMetrics(SM_REMOTESESSION); 获取远程session 内部实现和这个雷同
int _tmain(int argc, _TCHAR* argv[])
{
PWTS_SESSION_INFO psi;
DWORD dwCount;
//query session
DWORD hid = WTSGetActiveConsoleSessionId();
printf("WTSGetActiveConsoleSessionId: %d \n", hid);
BOOL bRet = WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &psi, &dwCount);
if (!bRet)
return 0;
std::wstring strName;
for (unsigned int i = 0; i < dwCount; i ++)
{
std::wcout<<L"pWinStationName: "<<psi[i].pWinStationName<<L"\t";
printf("SessionId: %d \t", psi[i].SessionId);
printf("State: %d \n", psi[i].State);
DWORD dwSessionId = psi[i].SessionId;
PVOID pstr = NULL;
DWORD dwLen = 0;
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTS_INFO_CLASS::WTSUserName, (LPWSTR*)&pstr, &dwLen);
std::wstring strUserName = (PWCHAR)pstr;
std::wcout<<L"strUserName: "<<strUserName<<std::endl;
//printf("strUserName:%s \n", strUserName.c_str());
}
WTSFreeMemory(psi);
return 0;
}