Domanda

Esiste un modo in cui il mio programma può determinare quando è in esecuzione su un Desktop remoto (Servizi terminal)?

Vorrei abilitare un "timeout di inattività" sul programma quando è in esecuzione su una sessione di Desktop remoto. Poiché gli utenti sono noti per lasciare aperte le sessioni di Desktop remoto, desidero che il mio programma termini dopo un determinato periodo di inattività. Ma non voglio che il timeout di inattività sia abilitato per gli utenti non RD.

È stato utile?

Soluzione

GetSystemMetrics (SM_REMOTESESSION) (come descritto in http://msdn.microsoft. com / it-it / library / aa380798.aspx )

Altri suggerimenti

Ecco il codice gestito C # che utilizzo:

/// <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;
    }
}

Se vuoi sapere della TUA applicazione che è in esecuzione nella TUA sessione, funziona quanto segue:

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

Ma non in generale per qualsiasi ID processo.


Se vuoi conoscere qualsiasi processo arbitrario che potrebbe essere in esecuzione in qualsiasi sessione arbitraria, puoi utilizzare il metodo seguente.

Puoi prima convertire l'ID processo in un ID sessione chiamando ProcessIdToSessionId . Una volta che hai l'ID sessione, puoi usarlo per chiamare: WTSQuerySessionInformation . Puoi specificare WTSInfoClass come valore WTSIsRemoteSession e questo ti darà le informazioni sul fatto se l'applicazione è una connessione desktop remoto o meno.

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top