Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   GetUserNameEx (https://www.delphipraxis.net/66400-getusernameex.html)

napstar 9. Feb 2010 13:07

Re: GetUserNameEx
 
Zitat:

Zitat von DeddyH
Geht es so?
Delphi-Quellcode:
if GetUserNameEx(fFormat, @Buffer[0], Size) then

so lässt sichs zwar compilieren.. aber ich bekomme nur fehlermeldungen ausgegeben ^^..

@p80286: was meinst du mit reste?


//edit: es geht um delphi 2010

Mithrandir 9. Feb 2010 13:13

Re: GetUserNameEx
 
Eventuell solltest du dann die Unicode-Version probieren:

Delphi-Quellcode:
function GetUserNameExW(NameFormat: DWORD;
  lpNameBuffer: LPCWSTR; var nSize: DWORD):Boolean; stdcall;
  external 'secur32.dll' Name 'GetUserNameExW';
Mal so in Blaue geschossen...

napstar 9. Feb 2010 13:16

Re: GetUserNameEx
 
funktioniert.. aaaber die ausgabe ist

http://www.imagebanana.com/img/d5nud06k/Unbenannt.jpg

DeddyH 9. Feb 2010 13:18

Re: GetUserNameEx
 
Dann versuch mal die "einfache" Variante (keine Garantie, nur schnell heruntergetippt):
Delphi-Quellcode:
function CurrentUser: string;
var iLen: DWORD;
begin
  iLen := 1024;
  SetLength(Result,iLen);
  if Windows.GetUserName(PChar(Result),iLen) then
    SetLength(Result,StrLen(PChar(Result)))
  else
    SetLength(Result,0);
end;

Luckie 9. Feb 2010 13:18

Re: GetUserNameEx
 
Was hast du erwartet wie sie denn aussieht?

moonwalk55 3. Mär 2010 16:40

Re: GetUserNameEx
 
Hallo Zusammen,

damit ich nicht immer eine extra Unit verwenden muss, habe ich den Funktionsaufruf von GetUserNameEx in der "windows.pas" ergänzt.

Ich verwende Delphi 2010. In der "windows.pas" war schon die Deklaration von GetComputerNameEx enthalten. Also habe ich die Aufrufe von GetUserNameEx entsprechend angelegt. Komischerweise ist die Erklärung der Funktion in der Online-Hilfe von Delphi enthalten.

Folgende Eintragungen habe ich in der "windows.pas" unterhalb von GetUserName vorgenommen:

INTERFACE - Teil

Delphi-Quellcode:
type
  _EXTENDED_NAME_FORMAT = (NameUnknown,
    NameFullyQualifiedDN, NameSamCompatible, NameDisplay,
    NameEmpty1, NameEmpty2,
    NameUniqueId, NameCanonical, NameUserPrincipal,
    NameCanonicalEx, NameServicePrincipal,
    NameEmpty3, NameDnsDomain);
 {$EXTERNALSYM _EXTENDED_NAME_FORMAT}
 TExtendedNameFormat = _EXTENDED_NAME_FORMAT;
 EXTENDED_NAME_FORMAT = _EXTENDED_NAME_FORMAT;
 {$EXTERNALSYM EXTENDED_NAME_FORMAT}

function GetUserNameEx(NameFormat: TExtendedNameFormat; lpBuffer: PWideChar; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameEx}
function GetUserNameExA(NameFormat: TExtendedNameFormat; lpBuffer: PAnsiChar; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameExA}
function GetUserNameExW(NameFormat: TExtendedNameFormat; lpBuffer: PWideChar; var nSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUserNameExW}
IMPLEMENTATION - Teil

Delphi-Quellcode:
function GetUserNameEx; external 'Secur32.dll' name 'GetUserNameExW';
function GetUserNameExA; external 'Secur32.dll' name 'GetUserNameExA';
function GetUserNameExW; external 'Secur32.dll' name 'GetUserNameExW';

Der Aufruf innerhalb des Programms erfolgt dann einfach über folgende Funktion:

Delphi-Quellcode:
function GetAUserNameEx(ANameFormat: TExtendedNameFormat): String;
var ABuf: array[0..1023] of Char;
    Size: DWord;

begin
 Result:= '';
 Size:= 1024;
 if GetUserNameEx(ANameFormat, @ABuf, Size) then
  Result:= ABuf;
end;
Das hat die ganze Sache schon recht vereinfacht und funktioniert prima.

ele 3. Mär 2010 17:21

Re: GetUserNameEx
 
Ich krieg Schmerzanfälle wenn ich sowas sehe...

Man sollte NIE eine System-Unit ändern. Das Problem ist nicht, dass man das nicht tun kann, sondern dass man das nicht tun sollte. Erstens funktioniert dann dein Programm nicht wenn jemand anderes das Programm kompiliert, der die Windows Unit nicht frisiert hat. Zweitens muss mann die Änderungen bei Updates der jeweiligen Unit nachführen. Und eine Ausrede wie: Damit ich eine Unit weniger einbinden muss, lass ich nicht gelten. Faule Programmierer sollten sich eines merken: Eines Tages wird sich das rächen und man wird sich wünschen man hätte es damals schon richtig gemacht.

Trotzdem, wilkommen in der DP.

moonwalk55 3. Mär 2010 21:34

Re: GetUserNameEx
 
Hallo ele,

danke für die Antwort. Das mit dem Einfügen in die "windows.pas" oder einer Extra Unit habe ich mir auch schon überlegt. Nun habe ich aber der Ergänzung den Vorzug gegeben, weil es sich nur um eine zusätzliche Funktion handelt, die eigentlich zu den anderen Funktionen gehört und wahrscheinlich vergessen worden ist.

Nun gut, ich werde sie wohl in meine eigene Utils-Sammlung aufnehmen.

Was mir aber überhaupt nicht gefällt, sind überhebliche Bemerkungen und ein arroganter Ton. Niemand ist allwissend. Wahre Größe zeigt sich dann, wenn man Fehler zugeben kann und daraus lernt. Dieses Forum ist für viele eine Anlaufstelle zur Problemlösung und zur Suche von Anregungen.

Beiträge sollten meiner Meinung nach sachlich im Ton sein, so dass niemand abgeschreckt oder beleidigt wird. Das Lernen sollte immer im Vordergrund stehen.

Luckie 3. Mär 2010 22:07

Re: GetUserNameEx
 
Wo war sein Beitrag jetzt überheblich, arrogant oder unsachlich?

ele 4. Mär 2010 10:23

Re: GetUserNameEx
 
Entschuldigung, falls das irgendwie Arrogant gewirkt hat, das war bestimmt nicht die Absicht. Dabei habe ich doch absichtlich Versucht Begriffe wie z.B "auspeitschen" zu vermeiden... :angel:

Du musst es nicht persönlich nehmen wenn ich über faule Programmierer schreibe, ich meine damit mich eingeschlossen. Auch ich bin manchmal faul, doch dass rächt sich dann in der Regel und endet in Mehrarbeit. Ist nur so ein Tipp aus meiner persönlichen Erfahrungskiste, niemand muss sich gezwungen fühlen irgendwas von dem zu tun was ich vorschlage.

p80286 4. Mär 2010 10:27

Re: GetUserNameEx
 
Zitat:

Zitat von ele
Ich krieg Schmerzanfälle wenn ich sowas sehe...

das war nicht so geschickt, auch wenn inhaltlich es nichts zu meckern gibt.

Zitat:

Zitat von ele
Faule Programmierer sollten sich eines merken: Eines Tages wird sich das rächen und man wird sich wünschen man hätte es damals schon richtig gemacht.

das ist keine Faulheit sondern Kurzsichtigkeit, wer faul ist, minimiert den Aufwand langfristig, Faulheit ist die negative Formulierung für Effizenz.


Gruß
K-H

moonwalk55 7. Mär 2010 20:30

Re: GetUserNameEx
 
Das mit der Erweiterung der "windows.pas" war sicherlich keine gute Idee. Ich muss Euch leider Recht geben. Die Funktion habe ich jetzt in meine eigene Sammlung von Spezialfunktionen aufgenommen und getestet.

Ich musste also erkennen, dass man zuerst das Gehirn einschalten sollte, bevor man sich äußert. Andererseits war der Seitenhieb aber auch lehrreich für die Zukunft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:44 Uhr.
Seite 2 von 2     12   

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