Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Remote Terminal Session erkennen (https://www.delphipraxis.net/158049-remote-terminal-session-erkennen.html)

shmia 3. Feb 2011 14:03

Remote Terminal Session erkennen
 
Ich verwende folgenden Code, um festzustellen, ob mein Programm auf einem Terminal Server läuft:
Delphi-Quellcode:
function IsRemoteTerminalServerSession:Boolean;
const
  SM_REMOTESESSION = $1000;  // in Windows.pas nicht enthalten
begin
   result := GetSystemMetrics( SM_REMOTESESSION ) <> 0;
end;
Leider kann ich so nicht unterscheiden, ob ich auf einen Terminal Server arbeite
oder ob ich auf einer normalen Arbeitsstation über eine Remote Session bin.

Was könnte man tun, um das herauszufinden?

Dezipaitor 3. Feb 2011 15:49

AW: Remote Terminal Session erkennen
 
Also erstmal:
Seit XP läuft immer ein Terminal Server. D.h. du kannst nur unterscheiden, ob deine Anwendung ferngesteuert wird oder nicht...eben RDP.

Also ist SM_REMOTESESSION schon richtig, um dies festzustellen. Oder willst du wissen, ob du auf einem Serversystem läufst oder ob der TS Dienst läuft?

BTW:
Du kannst erkennen, ob dein Programm in der Konsolensitzung (console session) läuft, indem du die Prozesssitzungskennung mit dem Wert von WTSGetActiveConsoleSessionId vergleichst. Wenn gleich, dann ist wird deine Anwendung von der lokalen Maus-, Tastatur gesteuert.

rollstuhlfahrer 3. Feb 2011 17:20

AW: Remote Terminal Session erkennen
 
Deine Frage ist leider etwas unverständlich formuliert. Du kannst folgendes nicht: Per RDP von einem "Client"-System auf das selbe "Client"-System eine Verbindung aufbauen. Aber: Du kannst, wenn du einen TS-Server(dienst) hast, gerne an der lokalen Konsole eine RDP-Verbindung zu localhost aufbauen (in den Einstellungen schauen, Windows verbietet das bei default).

Bernhard

Sir Rufo 3. Feb 2011 22:14

AW: Remote Terminal Session erkennen
 
Abfrage des Betriebssystems?

Es gibt aber auch alternative Terminalserver, die aus (fast) jedem Desktop BS einen echten Terminalserver machen.

shmia 4. Feb 2011 14:58

AW: Remote Terminal Session erkennen
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1079379)
Deine Frage ist leider etwas unverständlich formuliert

Ja, ich probier's nochmal.
Es gibt folgende Rechner:
A - Windows Server 2003/Terminal Server, nach dem Neusprech von Microsoft heisst das nicht mehr Terminal Server sondern Remote Desktop Session Host.
B - Windows 7
C - Windows XP
Mein Programm muss je nach dem ob es auf einem Terminal Server oder auf einer Workstation läuft unterschiedlich reagieren (andere Pfade usw).

Szenario 1:
Anwendung läuft ganz normal auf Rechner B
Szenario 2:
Rechner C stellt eine RDP-Verbindung zu Rechner A her und startet dort meine Anwendung.
Szenario 3:
Benutzer von Rechner B braucht Hilfe. Deshalb verbindet sich Rechner C mit B und startet meine Anwendung.
Und jetzt denkt meine Anwendung sie würde auf einem Terminal Server laufen und reagiert falsch weil sie ja in Wirklichkeit auf einer Arbeitstation läuft.
Ich möchte also Szenario 2 von 3 unterscheiden können.

Ich könnte nun meine Funktion zur Erkennung der Betriebsart erweitern:
Delphi-Quellcode:
function IsServerOS:boolean;
begin
// rauszufinden ob wir auf einem Server OS laufen
// GetVersionEx

  Result := ...;
end;

function IsRemoteTerminalServerSession:Boolean;
const
  SM_REMOTESESSION = $1000; // in Windows.pas nicht enthalten
begin
  result := (GetSystemMetrics( SM_REMOTESESSION ) <> 0) and
    IsServerOS;
end;
Ich möchte die Funktion IsServerOS gerne vermeiden weil sie aufwändig (bei Delphi5 fehlen die nötigen Strukturen) und nicht sicher ist.

himitsu 4. Feb 2011 15:01

AW: Remote Terminal Session erkennen
 
:gruebel:

Der Anwendung im Setup die entsprechenden Pfade übergeben ... dann ist es ja egal was wie wo läuft.

shmia 4. Feb 2011 16:15

AW: Remote Terminal Session erkennen
 
Zitat:

Zitat von himitsu (Beitrag 1079568)
Der Anwendung im Setup die entsprechenden Pfade übergeben ... dann ist es ja egal was wie wo läuft.

Wäre wohl besser gewesen, aber es sind schon einige Anwendungen in freier Wildbahn.

Dezipaitor 4. Feb 2011 18:27

AW: Remote Terminal Session erkennen
 
Was genau machst du, dass du unterscheiden musst?

Sir Rufo 4. Feb 2011 18:44

AW: Remote Terminal Session erkennen
 
Vor allem das mit den Pfaden ist doch kein Problem (eigentlich), wenn man es richtig macht, dann ist es völlig egal, worauf das Programm gerade läuft

dataspider 6. Feb 2011 17:32

AW: Remote Terminal Session erkennen
 
Hi,

vielleicht wäre IsServerOS doch nicht so schlecht, nur halt z.B. aus der ntdll...RtlGetNtProductType

Kann man ja mal probieren (siehe GetNTType aus IdGlobalProtocols.Pas)

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz