Results 1 to 11 of 11

Thread: huidige gebruiker

  1. #1

    huidige gebruiker

    Om de huidige gebruiker te achterhalen in windows gebruik ik odnerstaande code.
    In veel gevallen (aangezien niet iedereen dit aanpast) geeft ie als output 'gebruiker'
    Echter wanneer je dit aanpast in je configuratieschem, pc reboot en de code weer start blijft er de oude naam staan.
    Heeft iemand een betere manier om de huidige gebruiker te achterhalen?

    Code:
    function WUserName: String;
    var
      nSize: DWord;
    begin
     nSize := 1024;
     SetLength(Result, nSize);
     if GetUserName(PChar(Result), nSize) then
       SetLength(Result, nSize-1)
     else
       RaiseLastOSError;
    end;

  2. #2
    Je kan deze gebruiken:
    Delphi Code:
    1. username := GetEnvironmentVariable('USERNAME');

    Extra info over GetEnvironmentVariable:
    http://docwiki.embarcadero.com/Libra...onmentVariable

    Je zou eventueel kunnen kijken om met WMI op te vragen..

  3. #3
    Quote Originally Posted by Reidinga View Post
    Je kan deze gebruiken:
    Delphi Code:
    1. username := GetEnvironmentVariable('USERNAME');

    Extra info over GetEnvironmentVariable:
    http://docwiki.embarcadero.com/Libra...onmentVariable

    Je zou eventueel kunnen kijken om met WMI op te vragen..
    thanks voor je antwood! die heb ik later ook getest maar die geeft dezelfde waarde .(en ook weer de oude gebruikersnaam na aanpassen in windows en reboot)
    heb nu een andere optie en dat is de pc naam. die is vaak wel unieker & kun je ook aanpassen.

  4. #4
    Klopt - maar als je een unieke waarde nodig hebt - puur voor op database niveau bijvoorbeeld, zou ik op basis van de hd serial een unique id maken. En dan op je server kant een tabel bijhouden met de naam die bij de betreffende unique id hoort. Dat zou zelfs zonder een database kunnen, met bijvoorbeeld een json bestand of een xml, dan kan je gewoon een class object maken wat die lijst inlaadt uit de xml/json - en dan kan je middels een simpele functie de schermnaam opvragen bij de uid.

    Even heel snel:
    Delphi Code:
    1. type
    2.   TUIDReferences = class(TObject)
    3.   private
    4.     FList : TDictionary<String, String>;
    5.   public
    6.     procedure LoadRefs(AFilename: string);
    7.     function GetFriendlyName(UID: string) : string;
    8.  
    9.     constructor Create; overload; virtual;
    10.     constructor Create(AFilename: string); overload; virtual;
    11.     destructor Destroy; override;
    12.  
    13.     property References: TDictionary<String, String> read FList write FList;
    14.   end;
    15.  
    16. ...
    17.  
    18. constructor TUIDReferences.Create;
    19. begin
    20.   inherited Create;
    21.   FList := TDictionary<String, String>.Create;
    22. end;
    23.  
    24. constructor TUIDReferences.Create(AFilename: string);
    25. begin
    26.   inherited Create;
    27.   FList := TDictionary<String, String>.Create;
    28.   LoadRefs(AFilename);
    29. end;
    30.  
    31. function TUIDReferences.GetFriendlyName(UID: string) : string;
    32. begin
    33.   if FList.ContainsKey(UID) then
    34.     Result := FList.Items[UID]
    35.   else
    36.     Result := 'Onbekende Gebruiker';
    37. end;
    38.  
    39. procedure TUIDReferences.LoadRefs(AFilename: string);
    40. begin
    41.   //... laadt hier uit json / xml ....
    42.   // for i := 0 to ....
    43.   //FList.Add('uid', 'friendlyname');
    44. end;
    45.  
    46. destructor TUIDReferences.Destroy;
    47. begin
    48.   inherited;
    49.   FList.Clear;
    50.   FList.Free;
    51. end;

    Dan kan je gewoon deze class maken - en kan je de "friendlyname" ophalen. Kan zelfs nog simpeler - als je stringlist gebruikt met een NameValueSeparator - dan kan je key value pairs maken en uitlezen..

    Mocht je de WMI tour op willen gaan:
    https://github.com/RRUZ/delphi-wmi-c...uterSystem.pas

    Ik weet trouwens niet - je hebt het over de username, als je in een domein zit - is dat dan dezelfde username of is dat een andere? Ik gebruik gebruikersnamen zelf eigenlijk nooit
    Last edited by Reidinga; 18-Jun-19 at 20:33.

  5. #5
    Slim! hd serial nog niet eens aan gedacht. Ga ik inzetten, thanks allot!!

    Quote Originally Posted by Reidinga View Post
    Klopt - maar als je een unieke waarde nodig hebt - puur voor op database niveau bijvoorbeeld, zou ik op basis van de hd serial een unique id maken. En dan op je server kant een tabel bijhouden met de naam die bij de betreffende unique id hoort. Dat zou zelfs zonder een database kunnen, met bijvoorbeeld een json bestand of een xml, dan kan je gewoon een class object maken wat die lijst inlaadt uit de xml/json - en dan kan je middels een simpele functie de schermnaam opvragen bij de uid.

    Even heel snel:
    Delphi Code:
    1. type
    2.   TUIDReferences = class(TObject)
    3.   private
    4.     FList : TDictionary<String, String>;
    5.   public
    6.     procedure LoadRefs(AFilename: string);
    7.     function GetFriendlyName(UID: string) : string;
    8.  
    9.     constructor Create; overload; virtual;
    10.     constructor Create(AFilename: string); overload; virtual;
    11.     destructor Destroy; override;
    12.  
    13.     property References: TDictionary<String, String> read FList write FList;
    14.   end;
    15.  
    16. ...
    17.  
    18. constructor TUIDReferences.Create;
    19. begin
    20.   inherited Create;
    21.   FList := TDictionary<String, String>.Create;
    22. end;
    23.  
    24. constructor TUIDReferences.Create(AFilename: string);
    25. begin
    26.   inherited Create;
    27.   FList := TDictionary<String, String>.Create;
    28.   LoadRefs(AFilename);
    29. end;
    30.  
    31. function TUIDReferences.GetFriendlyName(UID: string) : string;
    32. begin
    33.   if FList.ContainsKey(UID) then
    34.     Result := FList.Items[UID]
    35.   else
    36.     Result := 'Onbekende Gebruiker';
    37. end;
    38.  
    39. procedure TUIDReferences.LoadRefs(AFilename: string);
    40. begin
    41.   //... laadt hier uit json / xml ....
    42.   // for i := 0 to ....
    43.   //FList.Add('uid', 'friendlyname');
    44. end;
    45.  
    46. destructor TUIDReferences.Destroy;
    47. begin
    48.   inherited;
    49.   FList.Clear;
    50.   FList.Free;
    51. end;

    Dan kan je gewoon deze class maken - en kan je de "friendlyname" ophalen. Kan zelfs nog simpeler - als je stringlist gebruikt met een NameValueSeparator - dan kan je key value pairs maken en uitlezen..

    Mocht je de WMI tour op willen gaan:
    https://github.com/RRUZ/delphi-wmi-c...uterSystem.pas

    Ik weet trouwens niet - je hebt het over de username, als je in een domein zit - is dat dan dezelfde username of is dat een andere? Ik gebruik gebruikersnamen zelf eigenlijk nooit

  6. #6
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    965
    Ik dacht dat er ergens in het registry een machine ID zat die voor cryptografie gebruikt wordt, die kan je ook gebruiken voor identificatie (en heeft geen last van als een klant een HDD crash krijgt en op een vervangend stuk zijn/haar computer herstelt)

  7. #7
    Counting your refs
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,080
    Voortbedurend op Stijn's suggestie:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography , key MachineGuid.

    Nadeel: als je meerdere PC's draait op basis van hetzelfde "image" (zoals geclonede VM's) dan hebben die allemaal dezelfde MachineGuid.

  8. #8
    Je kan natuurlijk ook zelf zo'n guid verzinnen en ergens opslaan in de registry. Bestaat de waarde, dan neem je die. Bestaat ie niet, dan genereer je 'm en sla je 'm op.
    1+1=b

  9. #9
    Ik persoonlijk gebruik een soortgelijk - ik pak de serial van de hdd + timestamp nu en daarvan een md5 hash. Die gebruik ik dan als unique-id en koppel ik aan een gebruiker, zo kan de gebruiker die ook meenemen naar een andere pc, en blijft de uid toch aan die persoon gebonden

  10. #10
    Quote Originally Posted by Reidinga View Post
    Ik persoonlijk gebruik een soortgelijk - ik pak de serial van de hdd + timestamp nu en daarvan een md5 hash. Die gebruik ik dan als unique-id en koppel ik aan een gebruiker, zo kan de gebruiker die ook meenemen naar een andere pc, en blijft de uid toch aan die persoon gebonden
    Kun je natuurlijk ook gewoon direct een GUID genereren. Heb je die hdd + timestamp niet voor nodig.

  11. #11
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    965
    Natuurlijk, als ze ontdekken waar je die bewaart, staat als het ware je achtpoort wagenwijd open... Doet me er aan denken dat ik ooit een spelletjesprogramma er op betrapt heb hun 'GUID' te begraven ergens onder HKEY_CLASSES_ROOT, alleen was die helemaal niet hexadecimaal en kwam er "H" en "Q" in voor. Kon je zo spotten (en wissen en nog een uur gratis spelen...)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •