4

请原谅我可能对这种“应用程序模式”使用了错误的术语。

我们的应用程序在启动过程中存在一个问题,即在主窗口启动之前它不会显示任务栏图标,即使在此之前屏幕上有加载进度窗口、登录窗口等。

我们更改代码来解决这个问题,但不幸的是,当通过 citrix 运行应用程序时,此修复程序现在显示两个图标,一个只有图标,没有文本。

有没有办法让我检测到应用程序正在通过 citrix 运行?我不知道正确的术语,但只有应用程序窗口被带到用户桌面,而不是整个远程桌面。

如果重要,该应用程序是用 Delphi 编写的。

4

3 回答 3

12

不确定如何在 delphi 中执行此操作,但如果您可以调用 user32.dll 并调用该函数:

if (GetSystemMetrics(SM_REMOTESESSION) != 0)
{
   // We are in a remote session
}

这应该告诉您是在 Citrix 还是终端服务环境中运行。SM_REMOTESESSION 定义为:

#define SM_REMOTESESSION        0x1000

有关 GetSystemMetrics api 的更多信息: 链接到 msdn

编辑 以下页面描述了如何在 delphi 中完成上述操作。适用于终端服务的内容也适用于 Citrix:

您的 Delphi 应用程序是否作为远程会话在终端服务下运行

于 2008-11-20T10:22:11.063 回答
6

这对我有用:

return System.Windows.Forms.SystemInformation.TerminalServerSession;
于 2009-01-06T12:04:50.850 回答
5

好奇的旁注:“open-collar”提出的解决方案只是 John Sibly 给出的解决方案的 .NET 包装器。他们应该在每种情况下返回相同的结果。我通过反汇编 System.Windows.Forms.SystemInformation 类确认了这一点。

于 2009-04-13T19:06:13.877 回答