Exemple #1
0
        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);
        }
Exemple #2
0
        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);
                }
            }
        }