当前位置:  开发笔记 > 编程语言 > 正文

确定程序是否在远程桌面上运行

如何解决《确定程序是否在远程桌面上运行》经验,为你挑选了3个好方法。

我的程序有没有办法确定它何时在远程桌面(终端服务)上运行?

我想在程序在远程桌面会话上运行时启用"不活动超时".由于用户因打开远程桌面会话而臭名昭着,我希望我的程序在指定的不活动时间后终止.但是,我不希望为非RD用户启用非活动超时.



1> Franci Penov..:

GetSystemMetrics(SM_REMOTESESSION)(如http://msdn.microsoft.com/en-us/library/aa380798.aspx中所述)



2> Ian Boyd..:

这是我使用的C#托管代码:

/// 
/// 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!
/// 
/// 
/// 
public static Boolean IsRemoteSession
{
    //This is just a friendly wrapper around the built-in way
    get
    {
        return System.Windows.Forms.SystemInformation.TerminalServerSession;
    }
}



3> Brian R. Bon..:

如果您想了解在您的会话中运行的应用程序,以下内容有效:

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

但不是一般的任何进程ID.


如果您想知道任何可以在任意会话中运行的任意进程,那么您可以使用以下方法.

您可以通过调用ProcessIdToSessionId将进程ID转换为会话ID .获得会话ID后,您可以使用它来调用:WTSQuerySessionInformation.您可以指定WTSInfoClass为值WTSIsRemoteSession,这将为您提供有关该应用程序是否是远程桌面连接的信息.

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有