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

我的程序在远程桌面(terminal服务)上运行时可以确定是否有方法?

我想在远程桌面会话上运行程序时启用“非活动超时”。 由于用户在远程桌面会话打开时声名狼借,我希望我的程序在指定的闲置时间后终止。 但是,我不想为非RD用户启用不活动超时。

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

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

/// <summary> /// Indicates if we're running in a remote desktop session. /// If we are, then you MUST disable animations and double buffering ie 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; } } 

如果您想了解您的会话中正在运行的应用程序,请执行以下操作:

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

但通常不会有任何进程ID。


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

您可以先通过调用ProcessIdToSessionId将进程标识转换为会话标识。 一旦你有会话ID,你可以使用它来调用: WTSQuerySessionInformation 。 您可以指定WTSInfoClass作为WTSInfoClass值,这将为您提供有关该应用程序是否是远程桌面连接的信息。

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