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/)
-   -   Terminalserver Session ID (https://www.delphipraxis.net/201869-terminalserver-session-id.html)

oakley 5. Sep 2019 11:58

Terminalserver Session ID
 
Hallo zusammen,

wenn ich mich auf dem Terminalserver einlogge bekomme ich ja immer eine Session ID zugewiesen.
Das ist doch die Zahl, die beim umgeleiteten Drucker hinter dem "redirected" steht oder?
Also Drucker 123 (redirected 28) oder sowas.

Wir bekomme ich diese Session ID raus? geht das mit WTSGetActiveConsoleSessionId ?

Gibt es dazu evtl. einen Beispiel-Code?

LG

Mirko

BerndS 5. Sep 2019 12:40

AW: Terminalserver Session ID
 
Möglicherweise über die Umgebungsvariable SESSIONNAME die hat bei mir gerade den Wert RDP-Tcp#29 also Nr 29.

oakley 5. Sep 2019 12:52

AW: Terminalserver Session ID
 
Hallo Bernd,

danke für die Info, das werde ich direkt mal testen.

LG

Mirko

BerndS 5. Sep 2019 12:56

AW: Terminalserver Session ID
 
Ich habe gerade mal WTSGetActiveConsoleSessionId getestet, die gibt mir 1 zurück?

oakley 5. Sep 2019 13:04

AW: Terminalserver Session ID
 
Ich hab mich gerade als Admin auf dem TS eingeloggt und mir über die Kommandozeile mit "SET" alle Variablen anzeigen lassen.
SESSIONNAME habe ich nicht. Ist ein Server 2019.

LG

Mirko

BerndS 5. Sep 2019 13:09

AW: Terminalserver Session ID
 
Komisch, habe ich auch und bei mir geht das.

oakley 5. Sep 2019 14:09

AW: Terminalserver Session ID
 
Ganz komische Sache.
Code:
GetEnvironmentVariable('SESSIONNAME')
Gibt mir RDP-Tcp#29. Hinter dem Drucker steht aber (redirected 19).
Hat die "redirected" Zahl also nichts mit der Session ID zu tun?

LG

Mirko

Schokohase 5. Sep 2019 14:13

AW: Terminalserver Session ID
 
Nein, hat sie nicht.
Der SessionName kann nicht aus der SessionID hergeleitet werden.
Der Wert hinter dem redirected ist aber auf jeden Fall die SessionID.

So kommt man an SessionName und ID:
Code:
C:\>query session
 SITZUNGSNAME     BENUTZERNAME            ID STATUS TYP        GERÄT
 services                                   0  Getr.
 console                                    1  Verb.
 rdp-tcp#12        hansfranz                9  Aktiv  rdpwd
>rdp-tcp#16        administrator           12  Aktiv  rdpwd
 rdp-tcp                                65536  Abhör.
Die Zeile mit dem > davor, das ist man selber.

HolgerX 5. Sep 2019 16:20

AW: Terminalserver Session ID
 
Hmm..

Lass das mit dem Drucker, das funktioniert nur dann wenn der TherminalServer so konfiguriert ist..

Geht auch einfacher:

Delphi-Quellcode:
function ProcessIdToSessionId(dwProcessId: DWORD;var pSessionId: DWORD): BOOL; stdcall; external kernel32 name 'ProcessIdToSessionId';



var
  nProcessID, nSessionID : DWORD;
begin
  nProcessID := GetCurrentProcessId;
  nSessionID := 0;
  if ProcessIdToSessionID( nProcessID, nSessionID) then begin
    if nSessionID > 0 then begin
      // Mach was mit der ID....
    end;
  end;
end;

Kann z.B. genutzt werden um den ClientNamen zu ermitteln:

Delphi-Quellcode:
function GetPCClientName : string;
var
  nProcessID, nSessionID : DWORD;
  nByteCount : DWORD;
  acNameBuff : Pointer;
  tmpName : string;
begin
  Result := '';

  nProcessID := GetCurrentProcessId;
  nSessionID := 0;
  if ProcessIdToSessionID( nProcessID, nSessionID) then begin
    if nSessionID > 0 then begin
      if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, nSessionId, WTSClientName, acNameBuff, nByteCount) then begin
        tmpName := StrPas(PChar(acNameBuff));
        // Da bei Vista kein Name vorhanden ist, auf Leerstring prüfen!
        if tmpName <> '' then
          result := tmpName;
        WTSFreeMemory(acNameBuff);
      end;
    end;
  end;
end;

oakley 6. Sep 2019 08:12

AW: Terminalserver Session ID
 
Hallo

Holger, Schokohase, danke für die Erklärungen das hilft mir schon weiter.
Ich habe hier eine Kasse die über den Terminalserver läuft.
Problem ist, das der User immer wieder eine neue SessionID beim login bekommt und die Kasse den alten "redirected" Drucker nimmt.

Daher wollte beim Login ich die SessionID ermitteln und den dementsprechenden Drucker dann eintragen.

LG

Mirko


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

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