且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

检测citrix“应用模式”?

更新时间:2023-11-30 15:22:10

不知道在delphi中如何做到这一点,但是如果你可以调用user32。 dll,并调用函数:

  if(GetSystemMetrics(SM_REMOTESESSION)!= 0)
{
//我们在远程会话
}

这应该告诉你,如果你正在运行在Citrix或终端服务环境中。
SM_REMOTESESSION被定义为:

  #define SM_REMOTESESSION 0x1000 
pre>

有关GetSystemMetrics api的更多信息,请访问:
链接到msdn



修改
以下页面介绍如何完全在delphi中。适用于终端服务的功能也适用于Citrix:



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


Forgive me for probably using the wrong term for this "application mode".

Our application has a problem during start in that it doesn't show a task bar icon until the main window is up, even though there are loading progress windows, logon-windows, etc. on screen before that.

We change the code to fix this, but unfortunately this fix, when running the app through citrix, now shows two icons, one with just the icon and no text.

Is there a way for me to detect that the application is running through citrix? I don't know the right term for this, but only the app window is brought to the users desktop, not the whole remote desktop.

If it matters, the app is written in Delphi.

Not sure exactly how to do this in delphi, but if you can call out to the user32.dll, and call the function:

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

This should tell you if you are running in a Citrix or Terminal Services environment. SM_REMOTESESSION is defined as:

#define SM_REMOTESESSION        0x1000

More info on the GetSystemMetrics api here: Link to msdn

Edit The following page describes how to do exactly the above in delphi. What works for Terminal Services should also work for Citrix:

Is your Delphi Application Running under Terminal Services as a Remote Session