Pregunta

¿Hay alguna forma de que mi programa pueda determinar cuándo se ejecuta en un Escritorio remoto (Terminal Services)?

Me gustaría habilitar un " tiempo de inactividad " en el programa cuando se ejecuta en una sesión de Escritorio remoto. Como los usuarios son conocidos por dejar abiertas las sesiones de Escritorio remoto, quiero que mi programa finalice después de un período específico de inactividad. Pero, no quiero que se habilite el tiempo de espera de inactividad para usuarios que no sean RD.

¿Fue útil?

Solución

GetSystemMetrics (SM_REMOTESESSION) (como se describe en http://msdn.microsoft. com / es-us / library / aa380798.aspx )

Otros consejos

Aquí está el código administrado de C # que uso:

/// <summary>
/// Indicates if we're running in a remote desktop session.
/// If we are, then you MUST disable animations and double buffering i.e. Pay your taxes!
/// 
/// </summary>
/// <returns></returns>
public static Boolean IsRemoteSession
{
    //This is just a friendly wrapper around the built-in way
    get
    {
        return System.Windows.Forms.SystemInformation.TerminalServerSession;
    }
}

Lo siguiente funciona si desea saber acerca de SU aplicación que se ejecuta en SU ??sesión:

BOOL IsRemoteSession(void)
{
   return GetSystemMetrics( SM_REMOTESESSION );
}

Pero no en general para cualquier ID de proceso.


Si desea saber acerca de cualquier proceso arbitrario que pueda ejecutarse en cualquier sesión arbitraria, puede utilizar el siguiente método.

Primero puede convertir la ID del proceso en una ID de sesión llamando a ProcessIdToSessionId . Una vez que tenga el ID de sesión, puede usarlo para llamar: WTSQuerySessionInformation . Puede especificar WTSInfoClass como valor WTSIsRemoteSession y esto le dará información sobre si esa aplicación es una conexión de escritorio remota o no.

BOOL IsRemoteSession(DWORD sessionID)
{
   //In case WTSIsRemoteSession is not defined for you it is value 29
   return WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionID, WTSIsRemoteSession, NULL, NULL);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top