4

この「アプリケーション モード」に間違った用語を使用していることをお許しください。

私たちのアプリケーションには、開始時に問題があり、メイン ウィンドウが表示されるまでタスク バー アイコンが表示されません。その前に、読み込み中の進行状況ウィンドウ、ログオン ウィンドウなどが画面に表示されます。

これを修正するためにコードを変更しましたが、残念ながらこの修正により、citrix を介してアプリを実行すると、2 つのアイコンが表示されるようになりました。1 つはアイコンのみでテキストはありません。

アプリケーションが 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 へのリンク

編集 次のページでは、デルファイで上記を正確に行う方法について説明します。ターミナル サービスで機能するものは、Citrix でも機能するはずです。

Delphi アプリケーションはターミナル サービスでリモート セッションとして実行されていますか

于 2008-11-20T10:22:11.063 に答える
6

これは私のために働きます:

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

好奇心旺盛な方への補足:「open-collar」によって提案されたソリューションは、JohnSiblyによって提供されたものの単なる.NETラッパーです。すべての場合で同じ結果を返す必要があります。System.Windows.Forms.SystemInformationクラスを分解してこれを確認しました。

于 2009-04-13T19:06:13.877 に答える