puerto - la edicion principal de windows 10 no es compatible con escritorio remoto
Determine si un programa se está ejecutando en un escritorio remoto (3)
¿Hay alguna manera en que mi programa pueda determinar cuándo se ejecuta en un Escritorio remoto (Servicios de Terminal Server)?
Me gustaría habilitar un "tiempo de espera 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, deseo que mi programa finalice después de un período de inactividad específico. Pero no quiero que el tiempo de inactividad esté habilitado para usuarios que no sean RD.
GetSystemMetrics (SM_REMOTESESSION) (como se describe en http://msdn.microsoft.com/en-us/library/aa380798.aspx )
Aquí está el código administrado 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 quiere saber sobre SU aplicación que se ejecuta en SU sesión:
BOOL IsRemoteSession(void)
{
return GetSystemMetrics( SM_REMOTESESSION );
}
Pero no en general para ninguna ID de proceso.
Si desea saber acerca de cualquier proceso arbitrario que podría ejecutarse en cualquier sesión arbitraria, puede utilizar el siguiente método.
Primero puede convertir el ID de proceso a un ID de sesión llamando a ProcessIdToSessionId . Una vez que tenga la ID de la sesión, puede usarla para llamar a: WTSQuerySessionInformation . Puede especificar WTSInfoClass
como valor WTSIsRemoteSession
y esto le dará la información sobre si esa aplicación es una conexión de escritorio remoto 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);
}