Pergunta

Existe uma maneira meu programa pode determinar quando ele está sendo executado em um ambiente de trabalho remoto (Terminal Services)?

Eu gostaria de permitir que um "tempo de inatividade" no programa quando ele está sendo executado em uma sessão Remote Desktop. Como os usuários são notórios por deixar sessões de Área de Trabalho Remota aberto, quero que meu programa para terminar após um determinado período de inatividade. Mas, eu não quero que o tempo limite de inatividade ativado para usuários não-RD.

Foi útil?

Solução

GetSystemMetrics (SM_REMOTESESSION) (como descrito em http://msdn.microsoft. com / en-us / library / aa380798.aspx )

Outras dicas

Aqui está o C # conseguiu uso de código i:

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

As seguintes obras se você quer saber sobre a sua aplicação que está sendo executado em sua sessão:

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

Mas não em geral para qualquer ID de processo.


Se você quiser saber sobre qualquer processo arbitrário que pode ser executado em qualquer sessão arbitrária, então você pode usar o abaixo método.

Você pode primeiro converter o ID do processo para um ID de sessão chamando ProcessIdToSessionId . Depois de ter o ID da sessão que você pode usá-lo para chamar: WTSQuerySessionInformation . Você pode especificar WTSInfoClass como valor WTSIsRemoteSession e isso vai lhe dar a informação sobre se esse aplicativo é uma conexão remota ou não.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top