Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Computername des Remotedesktop-benuzter herausfiden (https://www.delphipraxis.net/35522-computername-des-remotedesktop-benuzter-herausfiden.html)

NikoMitDaMacht 8. Dez 2004 14:11


Computername des Remotedesktop-benuzter herausfiden
 
Hi, :P
Ich muss mit einem programm, das auf einem remote-desktop-verbindungs-rechner lauft(termialserver), den Computernamen des pc's der die verbindung benutzt (also client) herausfinden.

Habe leider keinen plan wie das gehen soll :?
ich hoffe das weiss einer von euch da an den monitoren

danke!
gruss niko

:-D :-D :-D

UweR 8. Dez 2004 15:43

Re: Computername des Remotedesktop-benuzter herausfiden
 
Hallo Nico,

da gibts API-Funktionen zu. Schau mal auf der Seite hier TerminalServicesAPI-Referenz nach. Da kannst du dir mit WTSEnumrateSessions (oder so ähnlich) alle sessions auflisten lassen und irgendwo darin müßte auch der Rechnername des Clients versteckt sein. Die Unit mit den Funktionsdeklarationen kannst du dir bei den Jedi's runter laden, frag mich aber bitte nicht genau wo. Ich kann sie dir aber zur Not zukommen lassen.

NikoMitDaMacht 10. Dez 2004 10:17

Re: Computername des Remotedesktop-benuzter herausfiden
 
Ich komm da nur leider nicht dran (die .pas habich) (computername)
Welche funktion soll ich nehmen?

ps:
Auf dem server laufen viele sessions!

UweR 10. Dez 2004 14:43

Re: Computername des Remotedesktop-benuzter herausfiden
 
Hallo Niko,

Zitat:

Ich komm da nur leider nicht dran (die .pas habich) (computername)
Welche funktion soll ich nehmen?

ps:
Auf dem server laufen viele sessions!

Mit GetComputername kommst du natürlich nur an deinen eigenen Computernamen dran. Du mußt dir halt die Sessions auflisten und durchlaufen. An bestimmte Infos darfst du auch nur mit ADminrechten dran.



Der folgende Code listete alle Rechenrnamen auf der Sitzungen auf die sich auf dem lokalen Server befinden.

Delphi-Quellcode:
   hServer := WTSOpenServer(NIL);
   if (hServer <> 0) then begin
      if WTSEnumerateSessions(hServer, 0, 1, SessionPtr, nCount ) then begin
         WorkPtr := SessionPtr;
         for i:=1 to nCount do begin
            if WTSQuerySessionInformation(hServer, WorkPtr^.SessionId, WTSClientName, acNameBuff, nByteCount) then begin
               sName := StrPas(PChar(acNameBuff));
                // in sName steht jetzt der Rechnername drin

               WTSFreeMemory(acNameBuff);
            end; // if WTSQuerySessionInformation
            inc(WorkPtr);
         end; // for i:=1 to nCount
      end; // if WTSEnumerateSessions(hServer ...
      WTSFreeMemory(SessionPtr);
    end;
Der Code ist aus ner bestehenden Funktion rauskopiert und geändert worden. Bitte nicht erwarten das er so funktioniert. Er soll auch mehr als Anhaltspunkt dienen wie man sowas macht.

NikoMitDaMacht 15. Dez 2004 18:39

Re: Computername des Remotedesktop-benuzter herausfiden
 
Vielen dank!

Aber ich will ja eigentlich nicht alle namen von alle sessions sondern nur den von der session auf der das prog läuft.
leider hab ich auch keine adminrechte

UweR 16. Dez 2004 07:50

Re: Computername des Remotedesktop-benuzter herausfiden
 
Hallo Niko,

an deine eigene Sessiondaten müßtest du auch ohne Adminrechte ran kommen. Die folgende Lösung sollte eigentlich so funktionieren:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jwaWTSAPI32, jwaWinBase;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   nProcessID, nSessionID, nByteCount : DWORD;
   acNameBuff : Pointer;

begin
   nProcessID := GetCurrentProcessId;

   if ProcessIdToSessionID( nProcessID, nSessionID) then begin
      if nSessionID > 0 then begin
         if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, nSessionId, WTSClientName, acNameBuff, nByteCount) then begin
            Edit1.Text := StrPas(PChar(acNameBuff));
             // in sName steht jetzt der Rechnername drin

            WTSFreeMemory(acNameBuff);
         end;

      end;
   end;

end;

end.
und sorgt zumindest bei mir dafür das nach Knopfdruck in Edit1 der Rechnername steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.

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