わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

セッション情報を列挙する

セッション情報を列挙するには、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 )






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。