セッション情報を列挙するには、WTSEnumerateSessions()関数を利用します。セッションの数だけWTS_SESSION_INFOが格納されたメモリへのポインタと、セッションの数を取得できます。
#include <tchar.h> #include <iostream> #include <windows.h> #include <wtsapi32.h> // lib #pragma comment( lib, "wtsapi32.lib" ) /* セッション情報を列挙する */ int _tmain ( int argc , _TCHAR* argv[] ) { // 標準出力にユニコードを表示できるようにする setlocale( LC_ALL, "Japanese" ); /* セッション情報を列挙する */ { WTS_SESSION_INFO* pSessionInfos = NULL; DWORD dwCount = 0; // 指定したターミナルサーバー上のセッションのリストを取得 if ( 0 != ::WTSEnumerateSessions( WTS_CURRENT_SERVER_HANDLE // アプリケーションを実行中のターミナルサーバー , 0 // Reserved , 1 // Version 1を固定で指定する , &pSessionInfos // WTS_SESSION_INFOの受け取りポインタ , &dwCount // セッション情報の数 ) ) { if ( NULL != pSessionInfos ) { const static TCHAR* pStrState[] = { L"WTSActive" , L"WTSConnected" , L"WTSConnectQuery" , L"WTSShadow" , L"WTSDisconnected" , L"WTSIdle" , L"WTSListen" , L"WTSReset" , L"WTSDown" , L"WTSInit" }; // セッション情報の表示 for ( int nI = 0; nI < (int)dwCount; nI++ ) { WTS_SESSION_INFO* pTmp = &pSessionInfos[ nI ]; std::wcout << L"[ " << nI << L" ]" << std::endl; std::wcout << L"SessionName = " << pTmp->pWinStationName << std::endl; std::wcout << L"SessionId = " << pTmp->SessionId << std::endl; std::wcout << L"SessionState = " << pStrState[ pTmp->State ] << L"( " << pTmp->State << L" )" << std::endl; } // メモリの解放 ::WTSFreeMemory( pSessionInfos ); } } } // 処理結果を返す return 0; }
[ 0 ] SessionName = Services SessionId = 0 SessionState = WTSDisconnected( 4 ) [ 1 ] SessionName = Console SessionId = 6 SessionState = WTSActive( 0 ) [ 2 ] SessionName = 7A78855482A04FA781DC SessionId = 65536 SessionState = WTSListen( 6 )