![]() |
Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Ich schreibe gerade an einem kleinen Programm, welches den normalen Herunterfahren- und Abmeldendialog ersetzen soll. (also nicht im System ersetzen, man startet einfach das Programm an Stelle von Computer Ausschalten im Startmenü)
Für alles weitere: ich benutze WinXP Home Da soll auch Bildschirm sperren mit rein. Nun soll der Button dafür aber nur dann angezeigt werden, wenn der Benutzer auch ein Passwort hat, ansonsten ist es ja sinnlos. Also habe ich mit der NetUserGetInfo funktion angefangen, bin nun aber am Ende meines Einfallsreichtums Mein Hauptproblem ist jetzt: Ich weiß einfach nicht, woher ich den Wert von UF_PASSWD_NOTREQD bekomme! Mal so noch zum drüber sehen meine Funktion:
Delphi-Quellcode:
USER_INFO_1 = packed record
usri1_name: LPWSTR; usri1_password: LPWSTR; usri1_password_age: DWORD; usri1_priv: DWORD; usri1_homde_dir: LPWSTR; usri1_comment: LPWSTR; usri1_flags: DWORD; usri1_script_path: LPWSTR; end; function NetUserGetInfo(servername: LPCWSTR; username: LPCWSTR; level: DWORD; var bufptr: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetUserGetInfo'; function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetApiBufferFree'; { ... } function TMainForm.IsPasswordRequired: Boolean; const UF_PASSWD_NOTREQD = 32; var Info: USER_INFO_1; P: Pointer; UserName: PWideChar; nSize: Cardinal; begin nSize := 0; GetUserNameW(NIL, nSize); GetMem(UserName, nSize*2+1); GetUserNameW(UserName, nSize); NetUserGetInfo(NIL, UserName, 1, P); Info := USER_INFO_1(P^); Result := not ((Info.usri1_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD); NetApiBufferFree(P); FreeMem(UserName); end; |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Hallo,
solche Konstanten findest du im Windows SDK - einfach per GREP über das Verzeichnis INCLUDE drüber und da hast du dann in der Datei LMaccess.h:
Code:
Oder du verwendest die JEDI Units JwaLM bzw. JwaLMaccess.
//
// Bit masks for field usriX_flags of USER_INFO_X (X = 0/1). // #define UF_SCRIPT 0x0001 #define UF_ACCOUNTDISABLE 0x0002 #define UF_HOMEDIR_REQUIRED 0x0008 #define UF_LOCKOUT 0x0010 #define UF_PASSWD_NOTREQD 0x0020 #define UF_PASSWD_CANT_CHANGE 0x0040 #define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x0080 Freundliche Grüße |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Zitat:
Wenn in der Hilfe - wo? Wenn als Datei - wie heißt sie/wo ist sie? Irgendwas klappt da bei mir noch nicht, aber allein um auszuwerten, was die Funktion zurückgibt fehlen mir schonwieder die nächsten Konstanten, daher würde ich gern genau wissen, ob ich diese Deklarationen schon auf meinem Computer habe und nur nicht finde. Ich hab Delphi 7 Personal |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Hallo,
zum Windows SDK gehören u.a. alle C++ Header Files für die dokumentierten APIs. Den aktuellen SDK kannst du dir bei ![]() ![]() Freundliche Grüße |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Gut, bei MS ist das zeug 1,3 GB groß, dann glaub ich nicht, dass das bei meiner Delphi-Installation mit auf meine Platte gekommen ist.
Was ist denn da noch drin, dass das so groß ist :shock: Ich hab zwar ne DSL Flat, aber dafür ist mir die Verbindung doch wieder zu langsam, dass ich ne ganze DVD ziehe und nachher brauch ich nur n paar Zeilen. Gibts das auch stückchenweise? Also eben wie du sagtest alle Header-Dateien in einem kleinen Archiv? Danke! |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Guckst du bei
![]() |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Du könntest auch einfach dem Link "Web-Setup" im Abschnitt "Instructions" auf der von mir verlinkten MS-Seite folgen. Mit diesem Setup holst du dir den 500KB großen Setup-Manager und wählst nur die Sachen aus, die du wirklich (Header Files) brauchst. Wenn du Glück hast, hält sich das in Grenzen.
|
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Jupp, tut es. Ich habe mir so nur das reine Windows SDK und die Header installiert, ging ruckzuck mit DSL3000.
|
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Sooo, ich habs jetzt endlich geschafft!
Ich hatte das WebSetup zwar benutzt, aber bei meiner ersten Installation wurde nichts installiert (obwohl ich die mir wichtigen Dinge ausgewählt hatte), weil ich da das Visual C++ Express noch nicht drauf hatte (oder ein ähnliches Produkt). Jetzt hats jedenfalls funktioniert! Danke nochmal an alle! :-D |
Re: Benutzer Kennwort erforderlich - UF_PASSWD_NOTREQD
Es klappt einfach nicht!
Der folgende Code enthält nie das UF_PASSWD_NOTREQD-Flag, egal ob ich ein Kennwort besitze oder nicht?!
Delphi-Quellcode:
Liegts an meinem Code?
USER_INFO_1 = record
usri1_name: LPWSTR; usri1_password: LPWSTR; usri1_password_age: DWORD; usri1_priv: DWORD; usri1_homde_dir: LPWSTR; usri1_comment: LPWSTR; usri1_flags: DWORD; usri1_script_path: LPWSTR; end; function NetUserGetInfo(servername: LPCWSTR; username: LPCWSTR; level: DWORD; var bufptr: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetUserGetInfo'; function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetApiBufferFree'; { ... } function TMainForm.PasswordNotRequired: Boolean; const UF_PASSWD_NOTREQD = 32; var Info: USER_INFO_1; P: Pointer; UserName: PWideChar; nSize: Cardinal; R: DWORD; begin Result := True; nSize := 0; GetUserNameW(NIL, nSize); GetMem(UserName, nSize*2+1); GetUserNameW(UserName, nSize); if NetUserGetInfo(NIL, UserName, 1, P) = 0 then begin Info := USER_INFO_1(P^); Result := ((Info.usri1_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD); end; NetApiBufferFree(P); FreeMem(UserName); end; Ich bin auch gern bereit eine andere Methode zu benutzen, um rauszubekommen, ob der user ein Passwort hat oder nicht! (Nur die JEDIs wollte ich nicht erst wieder drauf machen, die sind soo viel ^^ ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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