public static uint GetRDPSession() { var sessList = EnumerateSessions(); uint retVal = 0; WTSAPI32.WTS_SESSION_INFO rdpSession = sessList.FirstOrDefault(ses => ses.pWinStationName.ToLower().Contains("rdp") && ses.State == 0); if (sessList.Any(ses => ses.pWinStationName.ToLower().Contains("rdp") && ses.State == 0)) { retVal = (uint)rdpSession.SessionID; } return(retVal); }
public static IEnumerable <WTSAPI32.WTS_SESSION_INFO> EnumerateSessions() { IntPtr ppSessionInfo = IntPtr.Zero; Int32 count = 0; Int32 retval = WTSAPI32.WTSEnumerateSessions(WTSAPI32.WTS_CURRENT_SERVER_HANDLE, 0, 1, ref ppSessionInfo, ref count); Int32 dataSize = Marshal.SizeOf(typeof(WTSAPI32.WTS_SESSION_INFO)); Int64 current = (Int64)ppSessionInfo; if (retval != 0) { for (int i = 0; i < count; i++) { WTSAPI32.WTS_SESSION_INFO sessInf = (WTSAPI32.WTS_SESSION_INFO)Marshal.PtrToStructure((System.IntPtr)current, typeof(WTSAPI32.WTS_SESSION_INFO)); current += dataSize; yield return(sessInf); } } }