19. august 2004 - 10:16Der er
19 kommentarer og 2 løsninger
Fulde navn på den bruger der logget ind
Hej.
Hvordan kan jeg finde ud af det fulde navn på den bruger som er logget ind? Det står ikke umiddelbart i reg.db'en.
Det navn jeg snakker om er hvis man trykker på CTRL+ALT+DELETE, så står der i toppen under Logon Information "Mit Navn is logged on as DOMIAN\USER" og det er så "Mit Navn" jeg gerne vil finde.
{1.} function GetCurrentUserName: string; const cnMaxUserNameLen = 254; var sUserName: string; dwUserNameLen: DWORD; begin dwUserNameLen := cnMaxUserNameLen - 1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := sUserName; end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetCurrentUserName); end;
{2.}
function GetCurrentUserName(var CurrentUserName: string): Boolean; var BufferSize: DWORD; pUser: PChar; begin BufferSize := 0; GetUserName(nil, BufferSize); pUser := StrAlloc(BufferSize); try Result := GetUserName(pUser, BufferSize); CurrentUserName := StrPas(pUser); finally StrDispose(pUser); end; end;
procedure TForm1.Button1Click(Sender: TObject); var CurrentUserName: string; begin GetCurrentUserName(CurrentUserName); Label1.Caption := CurrentUserName; end;
{*********************************************}
{ Windows NT/2000/XP:
The GetUserNameEx function retrieves the name of the user or other security principal associated with the calling thread. You can specify the format of the returned name. If the thread is impersonating a client, GetUserNameEx returns the name of the client. }
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
function LoggedOnUserNameEx(fFormat: DWORD): string; var UserName: array[0..250] of char; Size: DWORD; begin Size := 250; GetUserNameEx(fFormat, @UserName, @Size); Result := UserName; end;
procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := LoggedOnUserNameEx(NameSamCompatible); end;
vallemanden: Ingen af de nævnte eksempler kan give mig den information jeg beskriver i mit spørgsmål. Det er kommer tættest på er domain og brugernavn, men det er jo ikke det jeg ønsker ;)
Måske dette kan bruges fundet i MS SDK help : PSS ID Number: Q119670
Authored 20-Aug-1994 Last modified 05-Jan-1995
The information in this article applies to:
- Microsoft Win32 Software Development Kit (SDK) for Windows NT, versions 3.1 and 3.5
SUMMARY
Windows NT workstations can be organized into a domain, which is a collection of computers on a Windows NT Advanced Server network. The domain administrator maintains centralized user and group account information.
MORE INFORMATION
To find the full name of a user if you have the user name and domain name:
1. Convert the user name and domain name to Unicode, if they are not already Unicode strings. This is a requirement of the ported LAN Manager APIs that are used in the following steps.
2. Look up the name of the domain controller (DC) for the domain name by calling NetServerEnum().
3. Look up the user name by calling NetUserGetInfo()
4. Convert the full user name to ANSI, unless the program is expecting
to work with Unicode strings.
The sample code below is a function that takes a user name and a domain name as the first two arguments and returns the user's full name in the third argument.
For information on how to get the current user and domain, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q111544 TITLE : Looking Up the Current User and Domain
Sample Code -----------
#include <windows.h> #include <lm.h>
#include <stdio.h>
/********************************************************************\ * Function: GetFullName( char *UserName, char *Domain, char *dest ); * * * * Parameters: * * UserName: the user name * * Domain : the domain to which the user belongs * * dest : receives the user's full name *
* *
BOOL GetFullName(char *UserName, char *Domain, char *dest) { WCHAR wszUserName[256]; // Unicode user name WCHAR wszDomain[256]; LPBYTE ComputerName;
struct _SERVER_INFO_100 *si100; // Server structure struct _USER_INFO_2 *ui; // User structure
vallemanden: Det stykke kode har du jo skrevet én gang tidligere, og det er stadig ikke den information jeg søger. Prøv venligst og læs mit spørgsmål igen ;)
jeg køre xp, når jeg trykker på CTRL+ALT+Del står der ikke noget navn, men med det stykke kode får jeg den bruger der er logget ind på pc'en. og hvis det ikke er det du skal bruge så forstår jeg ikke dit spg. Og så undskylder jeg meget, men tak for din tålmodighed :)
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
function LoggedOnUserNameEx(fFormat: DWORD): string; var UserName: array[0..250] of char; Size: DWORD; begin Size := 250; GetUserNameEx(fFormat, @UserName, @Size); Result := UserName; end;
procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := LoggedOnUserNameEx(NameSamCompatible); end;
Kig på http://www.itpro.no/images/shots/rdp_securityboks.jpg - Det jeg gerne vil have er navnet, som i dette tilfælde er "Frank Aune". Det som dine eksempeler i bedste fald kan give er domænet og/eller brugernavnet, som i dette tilfælde er "THEONE\frank"
for Counter := 0 to EntiesRead - 1 do begin listbox1.Items.Add(WideCharToString(UserInfo^.usri1_name) + ' --> ' + WideCharToString(UserInfo^.usri1_comment)); Inc(UserInfo); end;
NetApiBufferFree(lpBuffer); until (NetApiStatus <> ERROR_MORE_DATA); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.