我有一个.net winforms应用程序,它有一些动画效果,淡入和滚动动画等。这些工作很好,但如果我在一个远程桌面协议会话,动画开始格栅。
有人能建议一种方法来确定应用程序是否正在RDP会话中运行,这样我就可以在这种情况下关闭效果吗?
发布于 2008-11-17 12:29:09
假设您至少在使用.NET Framework2.0,则不需要使用P/Invoke:只需检查System.Windows.Forms.SystemInformation.TerminalServerSession
(MSDN.
发布于 2008-12-16 17:59:57
除了进行初始检查以查看桌面是否在RDP会话中运行之外,您可能还希望处理ap正在运行时远程会话已连接或断开的情况。您可以在控制台会话上运行一个应用程序,然后有人可以启动到控制台的RDP连接。除非您的应用程序定期调用GetSystemMetrics,否则它将假定它不是作为终端服务会话运行的。
您可以让您的应用程序通过WTSRegisterSessionNotification注册会话更新通知。这将允许您的应用程序在远程连接已打开或关闭时立即通知您的应用程序在桌面会话下运行。有关C#代码的一些示例,请参阅here。
有关使用WTSRegisterSessionNotification的一些不错的Delphi Win32示例代码,请参阅此page。
发布于 2008-11-17 12:06:53
使用user32.dll中的GetSystemMetrics()函数。使用PInvoke调用它。以下是第一个链接提供的示例代码。第二个链接告诉您如何在.NET中调用它。
BOOL IsRemoteSession(void){
return GetSystemMetrics( SM_REMOTESESSION );
}
完整代码:
[DllImport("User32.dll")]
static extern Boolean IsRemoteSession()
{
return GetSystemMetrics ( SM_REMOTESESSION);
}
还有SystemInformation.TerminalServerSession
属性,它确定客户端是否连接到终端服务器会话。MSDN的code provided很广泛,所以我在这里不再重复。
https://stackoverflow.com/questions/295415
复制相似问题