![]() |
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 |
AW: Terminalserver Session ID
Möglicherweise über die Umgebungsvariable SESSIONNAME die hat bei mir gerade den Wert RDP-Tcp#29 also Nr 29.
|
AW: Terminalserver Session ID
Hallo Bernd,
danke für die Info, das werde ich direkt mal testen. LG Mirko |
AW: Terminalserver Session ID
Ich habe gerade mal WTSGetActiveConsoleSessionId getestet, die gibt mir 1 zurück?
|
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 |
AW: Terminalserver Session ID
Komisch, habe ich auch und bei mir geht das.
|
AW: Terminalserver Session ID
Ganz komische Sache.
Code:
Gibt mir RDP-Tcp#29. Hinter dem Drucker steht aber (redirected 19).
GetEnvironmentVariable('SESSIONNAME')
Hat die "redirected" Zahl also nichts mit der Session ID zu tun? LG Mirko |
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:
Die Zeile mit dem > davor, das ist man selber.
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. |
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; |
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 |
AW: Terminalserver Session ID
Den Drucker, den du benötigst kannst du dir aus der Registry auslesen
Code:
Wenn es den Eintrag TSSessionID gibt, dann ist das ein Drucker von so einer Sitzung und anhand der dort eingetragenen ID kann man den Drucker eindeutig der aktuellen Sitzung zuordnen.
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\<Name des Druckers>\PrinterDriverData
- TSSessionID REG_DWORD |
AW: Terminalserver Session ID
Ja aber das Problem ist das ich eventuell den Drucker 2 oder 3 mal da drin habe.
Einmal als redicted 20 und nochmal als redirected 21 und möglicherweise nochmal als redirected 22 oder höher. Bei beiden greift der Registry Eintrag und die SessionID steht da drin aber ich muss das eigentlich nach dem Login auf dem TS wissen welche Session ID vergeben wurde damit ich weiß welcher Druckereintrag der richtige ist. Ich sehe gerade das in HKEY_CURRENT_USER\Volatile Environment ein Subkey besteht, der gleich der Session ID ist. HKEY_CURRENT_USER\Volatile Environment\23 bei mir und darin steht ein DWORD Eintrag TEMP. Am Ende des Pfades steht auch die SessionID. HKEY_CURRENT_USER beinhaltet doch nur Daten des aktuell eingeloggten Users richtig? Da können also HKEY_CURRENT_USER\Volatile Environment\ nie 2 Subkeys stehen. LG Mirko |
AW: Terminalserver Session ID
Hmm..
Aber dafür ist doch das 'ProcessIdToSessionId' brauchbar: ![]() Nach login deine App starten und über ProcessIdToSessionId die SessionID deiner App erhalten, damit kannst Du dann schauen, welcher Drucker zu der Session gehört, in der die App 'jetzt' 'gerade' läuft. Wird die App in einer anderen Session gestartet, ist auch die SessionID eine Andere.... |
AW: Terminalserver Session ID
Hallo Holger,
gerade getestet und das ist genau das war ich brauche. Danke Dir !!! LG Mirko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr. |
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