Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi BUffer leeren. (https://www.delphipraxis.net/87723-buffer-leeren.html)

sebastian_buege 5. Mär 2007 10:26


BUffer leeren.
 
Hallo ich hoffe das ich hier richtig bin.

Ich habe frolgendes Problem. Ich möchte den aktuell angemeldeten System nutzer auslesen. das geht auch ganz gut. aber da ich den namen in einen buffer schreiben muss, zeigt er mir natürlich auch noch jee menge mist an (unnötige zeichen). ich vermute das es irgendetwas mit dem buffer zu tun hat. leider weiß ich nicht wie man ihn leert . vielleicht kann mir jemand halfen. vielen dank.

hier ist mein quellcode:
Delphi-Quellcode:
var
clBuffer: DWord;
Buffer,sql,id: string;

....
clBuffer := 255;
BUffer:='';
SetLength(Buffer, clBuffer);
GetUserName(pchar(Buffer), clBuffer);

yörsch 5. Mär 2007 10:28

Re: BUffer leeren.
 
Erstmal Herzlich Willkommen in der DP! :hello:
versuchs mal mit SetLength(Buffer, 0);

Relicted 5. Mär 2007 10:30

Re: BUffer leeren.
 
herzlich willkommen...

ich löse das folgendermaßen:

Delphi-Quellcode:
var
  u: array [0..127] of Char;
  dw: DWord;
begin
  dw := SizeOf( u );
  GetUserName( u, dw );
  Result := u;
end;
try that... sollte klappen...

Gruß
reli

Luckie 5. Mär 2007 10:30

Re: BUffer leeren.
 
Hilfe lesen hilft:
Zitat:

Return Value
If the function succeeds, the return value is a nonzero value, and the variable pointed to by lpnSize contains the number of TCHARs copied to the buffer specified by lpBuffer, including the terminating null character.
Guck dir mal dazu Delphi-Referenz durchsuchenSetStringt an.

Das wird ja immer schlimmer:
Delphi-Quellcode:
function GetCurrUserName: string;
var
  Size             : DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;
Man muss den Buffer auf die Tatsächliche Länge des Benutzernamens kürzen.

yörsch 5. Mär 2007 10:32

Re: BUffer leeren.
 
ich hab bei mir folgenden schnipsel gefunden...
Delphi-Quellcode:
function GetNTloginUser: string;
VAR szUserName: PChar;
    iUserNameLength: Cardinal;
begin
  iUserNameLength := 0;
  //Retrieve windows username
  GetUserName(nil, iUserNameLength);
  Inc(iUserNameLength, 2);
  GetMem(szUserName, iUserNameLength);
  if not GetUserName(szUserName, iUserNameLength) then szUserName := '';
  result:= szUserName;
end;

sebastian_buege 5. Mär 2007 10:34

Re: BUffer leeren.
 
Oh, das ging ja schnell. Vielen Dank euch allen ich denke mit den vielen Lösungsvorschlägen sollte es funktionieren.

Danke :-D

Luckie 5. Mär 2007 10:46

Re: BUffer leeren.
 
Und hier die Kurzform:
Delphi-Quellcode:
function GetLoggedinUser: String;
var
  Buffer: PChar;
  len: Cardinal;
begin
  if GetUserName(Buffer, len) then
    SetString(Result, Buffer, len);
end;

marabu 5. Mär 2007 10:49

Re: BUffer leeren.
 
Hallo Sebastian,

falls du mit den vielen Vorschlägen immer noch Schiffbruch erleiden solltest:

Delphi-Quellcode:
function GetUserName: string;
var
  buf: array [Byte] of Char;
  size: Cardinal;
begin
  size := SizeOf(buf);
  if Windows.GetUserName(@buf, size)
    then SetString(Result, buf, Pred(size))
    else Result := '';
end;
Freundliche Grüße vom marabu

sebastian_buege 5. Mär 2007 11:01

Re: BUffer leeren.
 
Vielen Dank für den zusätzlichen Tipp. Es hatte aber schon vorher funktioniert trotzdem allen vielen dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 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