Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Uzak masaüstü bağlanan makinayı alma
#1
Merhaba,
Uygulamamız server'da. Terminallerden uzak masaüstü ile bağlanıp programı çalıştırıyoruz. kayıt yapan/değişiklik yapan kullanıcı bilgilerini tutmak istiyorum. işlem yapılan, yani uzak masaüstü ile bağlanan makina adını (terminal) nasıl alabiliriz?
Cevapla
#2
İyi günler. Şöyle bir örneği delphi derleyicisinin unicode desteğine göre düzenleyince (aşağıdaki şekilde) sanırım çalışıyor.
unit UTWSInfo;

interface

uses
   SysUtils, Classes, Windows;

type
   TWorkStationInfo = class
   private
       class function GetTSClientName: string;
   public
       class function GetWorkstationID: string;
       class function IsTSRemoteSession: Boolean;
   end;

implementation

type
   _WTS_INFO_CLASS = (
   WTSInitialProgram,
   WTSApplicationName,
   WTSWorkingDirectory,
   WTSOEMId,
   WTSSessionId,
   WTSUserName,
   WTSWinStationName,
   WTSDomainName,
   WTSConnectState,
   WTSClientBuildNumber,
   WTSClientName,
   WTSClientDirectory,
   WTSClientProductId,
   WTSClientHardwareId,
   WTSClientAddress,
   WTSClientDisplay,
   WTSClientProtocolType);
 {$EXTERNALSYM _WTS_INFO_CLASS}
   WTS_INFO_CLASS = _WTS_INFO_CLASS;
   TWtsInfoClass = WTS_INFO_CLASS;
   TWTSQuerySessionInformationFunction = function(hServer: THandle;
SessionId: DWORD;
           WTSInofClass: Byte; var ppBuffer: PChar; var pBytesReturned:
DWORD): BOOL; stdcall;
   TWTSFreeMemoryProcedure = procedure(pMemory: Pointer); stdcall;

const
   SM_REMOTESESSION = $1000;

var
   sWorkStationID: string;

{ TWorkStationInfo }

class function TWorkStationInfo.GetTSClientName: string;
var
   LibHandle: HMODULE;
   WTSQuerySessionInformation: TWTSQuerySessionInformationFunction;
   WTSFreeMemory: TWTSFreeMemoryProcedure;
   ClientName: PChar;
   cByteseturned: Cardinal;
begin
   Result := '';
   LibHandle := LoadLibrary('wtsapi32.dll');
   if LibHandle <> 0 then
   begin
       try
{$IFDEF UNICODE}
           @WTSQuerySessionInformation := GetProcAddress(LibHandle, 'WTSQuerySessionInformationW');
{$ELSE}
           @WTSQuerySessionInformation := GetProcAddress(LibHandle, 'WTSQuerySessionInformationA');
{$ENDIF}
           @WTSFreeMemory := GetProcAddress(LibHandle, 'WTSFreeMemory');
           WTSQuerySessionInformation(0, DWORD(-1), Ord(WTSClientName), ClientName, cByteseturned);
           try
               Result := ClientName;
           finally
               WTSFreeMemory(Pointer(ClientName));
           end;
       finally
           FreeLibrary(LibHandle);
       end;
   end;
end;

class function TWorkStationInfo.GetWorkstationID: string;
var
   szComputerName: packed array[0..MAX_COMPUTERNAME_LENGTH] of Char;
   iSize: Cardinal;
begin
   if sWorkStationID = '' then
   begin
       if IsTSRemoteSession then
       begin
           // we are a terminal services client so get the client
           // workstation name
           sWorkStationID := UpperCase(GetTSClientName);
       end
       else
       begin
           iSize := MAX_COMPUTERNAME_LENGTH + 1;
           GetComputerName(szComputerName, iSize);
           sWorkStationID := UpperCase(szComputerName);
       end;
   end;

   Result := sWorkStationID;
end;

class function TWorkStationInfo.IsTSRemoteSession: Boolean;
begin
   // are we running as a TS client?
   Result := GetSystemMetrics(SM_REMOTESESSION) <> 0;
end;

end.
Bunu da aşaüıdaki kodla test ettiğimde aradığınız cevap açısından bir problem çıkmadı.
if TWorkStationInfo.IsTSRemoteSession then ShowMessage('Uzak masa üstü bağlantısı yapan bilgisayar adı..:'+TWorkStationInfo.GetWorkstationID)

else ShowMessage('Bağlantı yapılmayan oturumun açıldığı bilgisayar adı..:'+TWorkStationInfo.GetWorkstationID);
Cevapla
#3
Teşekkürler güzel bir konu ve güzel bir örnek olmuş .
Bağlanan bilgisayar ile ilgili daha fazla bilgi toplamak mümkün müdür ,? mesela ip ve konum gibi malum son zamanlarda hack olayları oldukça artı bu konudan müzdarip olan kişiler için
en azından ufak bir uygulama yazılıp bu tarz bilgiler alınabilir mi ?
Cevapla
#4
Teşekkürler, elinize sağlık.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Masaüstü projesini dağıtıma hazırlamak hakkında mxpain 2 902 29-01-2025, Saat: 13:19
Son Yorum: mrmarman
  Runtime ile SpinEdit toplamı alma denizfatihi 7 1.535 04-12-2024, Saat: 12:28
Son Yorum: yhackup
  Excel içeri alma Para birimi gonulali 3 994 28-10-2024, Saat: 05:34
Son Yorum: griposter
  kap.org.tr veri alma hk. pro_imaj 7 18.812 22-10-2024, Saat: 19:57
Son Yorum: Zeynepfeyza20
  Hikvision IP Kameradan Görüntü Alma erdogan 5 1.634 08-10-2024, Saat: 09:24
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi