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;