Hi Folks,
Ik moet de Active Directory username ophalen vanuit Windows. Dit is geen enkel punt, want dat kan gewoon via Secur32.dll.
Deze DLL is er echter niet op Windows NT bijv. en omdat ik dan 2 executables moet aanhouden omdat 'ie anders bij het starten van de applicatie een error geeft dat de DLL niet gevonden is, vind ik dat lastig.
De DLL is nu statisch meegebakken, maar wil ik eigenlijk dynamisch laden.
De code is nu:
Werkt dus uitstekend, alleen is die DLL dus keihard meegelinkt. Niet leuk dus.
Voor Windows 98 bijv. laad ik ook een DLL, alleen dat gaat zo:
Op internet is helaas niet zo bijster veel te vinden over hoe je dit aan moet pakken. Iemand enig idee?
Ik moet de Active Directory username ophalen vanuit Windows. Dit is geen enkel punt, want dat kan gewoon via Secur32.dll.
Deze DLL is er echter niet op Windows NT bijv. en omdat ik dan 2 executables moet aanhouden omdat 'ie anders bij het starten van de applicatie een error geeft dat de DLL niet gevonden is, vind ik dat lastig.
De DLL is nu statisch meegebakken, maar wil ik eigenlijk dynamisch laden.
De code is nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| const
NameUnknown = 0; // Unknown name type.
NameFullyQualifiedDN = 1; // Fully qualified distinguished name
NameSamCompatible = 2; // Windows NT® 4.0 account name
NameDisplay = 3; // A "friendly" display name
NameUniqueId = 6; // GUID string that the IIDFromString function returns
NameCanonical = 7; // Complete canonical name
NameUserPrincipal = 8; // User principal name
NameCanonicalEx = 9;
NameServicePrincipal = 10; // Generalized service principal name
DNSDomainName = 11; // DNS domain name, plus the user name
procedure GetUserNameEx(NameFormat: DWORD;
lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
external 'secur32.dll' Name 'GetUserNameExA';
{constructor}
...
function LoggedOnUserNameEx(fFormat: DWORD): string;
var
UserName: array[0..250] of char;
Size: DWORD;
begin
Size := 250;
GetUserNameEx(fFormat, @UserName, @Size);
Result := UserName;
end; |
Werkt dus uitstekend, alleen is die DLL dus keihard meegelinkt. Niet leuk dus.
Voor Windows 98 bijv. laad ik ook een DLL, alleen dat gaat zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| var
Win95_NetUserGetInfo : TWin95_NetUserGetInfo;
Win95_NetWkstaUserGetInfo : TWin95_NetWkstaUserGetInfo;
Win95_NetApiBufferFree : TWin95_NetApiBufferFree;
WinNT_NetWkstaGetInfo : TWinNT_NetWkstaGetInfo;
WinNT_NetApiBufferFree : TWinNT_NetApiBufferFree;
WSNT : ^WKSTA_INFO_100;
WS95 : ^WKSTA_USER_INFO_1;
EC : DWORD;
hNETAPI : THandle;
begin
// windows 95/98
hNETAPI := LoadLibrary( 'RADMIN32.DLL' );
if hNETAPI <> 0 then begin
// showmessage( 'win95 / win98 / winme client' );
@Win95_NetApiBufferFree := GetProcAddress( hNETAPI, 'NetApiBufferFree' );
@Win95_NetUserGetInfo := GetProcAddress( hNETAPI, 'NetUserGetInfoA' );
EC := Win95_NetWkstaUserGetInfo( nil, 1, Pointer( WS95 ) );
if EC = 0 then begin
Domain := WS95^.wkui1_logon_domain;
Username := WS95^.wkui1_username;
Win95_NetApiBufferFree( Pointer( WS95 ) );
filledIn := True;
Info.ID := 'CN=' + Username + '.O=' + Domain;
Info.FullName := Info.ID;
end;
end; |
Op internet is helaas niet zo bijster veel te vinden over hoe je dit aan moet pakken. Iemand enig idee?
[ Voor 3% gewijzigd door Verwijderd op 22-09-2004 21:19 ]