Moin, moin,
der Code von marabu funktioniert bei mir unter Windows VISTA x64 hervorragend, aber unter Window XP Prof. XP3 funktioniert er auch nicht.
Edit:
Ich habe jetzt noch ein bisschen rumprobiert und die USER_INFO_1008 gefunden. Die beinhaltet lediglich nur den Wert, den Du benötigst. Dazu habe ich jetzt den Code oben von marabu angepasst und es funktioniert unter Windows XP Prof. SP2.
Delphi-Quellcode:
const
UF_PASSWD_NOTREQD = 32;
UNLEN = 20; // 256 for groupnames
NERR_SUCCESS = 0;
TYPE
USER_INFO_1008 = record
usri1008_flags: DWORD;
end;
TUserInfo1008 = USER_INFO_1008;
PUserInfo1008 = ^TUserInfo1008;
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 PasswordNotRequired: Boolean;
var
ui: PUserInfo1008;
p: Pointer absolute ui;
un: WideString;
n: Cardinal;
begin
p := nil;
n := Succ(UNLEN);
SetLength(un, UNLEN);
Result := GetUserNameW(@un[1], n)
and (NetUserGetInfo(nil, @un[1], 1, p) = NERR_SUCCESS)
and ((ui.usri1008_flags and UF_PASSWD_NOTREQD) = UF_PASSWD_NOTREQD);
if Assigned(p) then
NetApiBufferFree(p);
end;
Probiere es einfach mal aus.