ユーザー セッションがどのような状態にあるかを判断する必要があります。つまり、ユーザーがログオンしてアクティブになっているか、またはユーザーがログオンしていないかを判断する必要があります。関数を使用してこれを行うには、状態メンバーを持つこの関数から返されるものをWTSEnumerateSessions
チェックしています。WTS_SESSION_INFO
オンラインドキュメントによると。
WTSActive ユーザーが WinStation にログオンしています
WTSDisconnected WinStation はアクティブですが、クライアントは切断されています。
問題は、現在自分のシステムにログオンしているが、現在のセッションで返された状態がWTSDisconnected
状態であると期待しているWTSActive
ということです。なぜこれが起こっているのか理由はありますか?
以下のコード
PWTS_SESSION_INFO pSessionInfo(nullptr);
DWORD countOfSessions(0);
DWORD sessionIndex(0);
if (WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, // local machine
0, // reserved, must be zero
1, // Version, must be one
&pSessionInfo,
&countOfSessions) == FALSE)
{
return false;
}
if (countOfSessions == 0 || !pSessionInfo)
{
return false;
}
const DWORD currentSession = GetRealSessionID(CurrentSession); //This case we are in session 0
for (; sessionIndex < countOfSessions; ++sessionIndex)
{
WTS_SESSION_INFO& sessionInfo = pSessionInfo[sessionIndex];
if (currentSession == sessionInfo.SessionId)
{
if (sessionInfo.State == WTSActive)
{
return true;
}
}
}
return false;
ありがとう