Entwickler-Ecke

Windows API - Benutzerbild ermitteln


Dezipaitor - Mi 26.03.08 01:21
Titel: Benutzerbild ermitteln
Hi,

ich suche eine Möglichkeit das Bild der Benutzers zu ermitteln, dass er beim EasyLogin (FUS) sehen kann. Bei Vista sieht man das Bild auch halb über dem geöffneten Starmenü. Die Standardbilder sind z.b. Katze und Schachfigur.

Weiß das jemand?

thx

CROSS [http://www.delphipraxis.net/post863718.html]


.#R4id - Mi 26.03.08 03:24

Hi user profile iconDezipaitor :wave:


Delphi-Quelltext
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:
function TForm1.GetUserName(): string;
var
  Buffer: array [0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
  Size: DWord;
begin
  Size := Pred(SizeOf(Buffer));
  Windows.GetUserName(Buffer, Size);
  Result := StrPas(Buffer);
end;

function TForm1.GetUserPicture(): TBitmap;
var
  CommonDataPath, UserName: string;
begin
  Result := TBitmap.Create;

  UserName := GetUserName;
  CommonDataPath := 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\User Account Pictures\' + UserName + '.bmp';

  if FileExists(CommonDataPath) then
  begin
    Result.Handle := LoadImage(0, PChar(CommonDataPath), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  end
  else ShowMessage(Format('%s'#13#10'"%s"', ['File not found:', CommonDataPath]));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.Bitmap := GetUserPicture;
end;


matze - Mi 26.03.08 09:27

ja vielleicht sollte man aber den Pfad nicht hardcoden, damit das dann auch unter Vista läuft :roll:


Dezipaitor - Mi 26.03.08 13:27

Danke für den Aufwand.
Leider gibt es den Pfad (wenn Virtualisierung aus) und diese Datei (wenn Virtualisierung an) unter Vista nicht.


.#R4id - Mi 26.03.08 13:47

Tut mir wirklich leid, aber ich habe nur Windows XP, deshalb kann ich dir leider nicht sagen, wo bei Vista diese Datei liegt. :(


.#R4id - Mi 26.03.08 13:56

Du könntest es aber so versuchen:

:arrow: TJvComputerInfoEx auf die Form

und dann:


Delphi-Quelltext
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:
function TForm1.GetUserName(): string;
var
  Buffer: array [0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
  Size: DWord;
begin
  Size := Pred(SizeOf(Buffer));
  Windows.GetUserName(Buffer, Size);
  Result := StrPas(Buffer);
end;

function TForm1.GetUserPicture(): TBitmap;
var
  CommonDataPath, UserName: string;
begin
  Result := TBitmap.Create;

  UserName := GetUserName;
  CommonDataPath := JvComputerInfoEx1.Folders.CommonAppData + '\Microsoft\User Account Pictures\' + UserName + '.bmp';

  if FileExists(CommonDataPath) then
  begin
    Result.Handle := LoadImage(0, PChar(CommonDataPath), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  end
  else ShowMessage(Format('%s'#13#10'"%s"', ['File not found:', CommonDataPath]));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.Bitmap := GetUserPicture;
end;


Dezipaitor - Mi 26.03.08 14:27

File not found:
"C:\ProgramData\Microsoft\User Account Pictures\Dezipaitor.bmp"


.#R4id - Mi 26.03.08 14:31

Hm...

Ich hab die Datei mit der Windows Suche gefunden:

Versteckte Ordner und System Dateien einblenden und dann unter Bildern nach "#username#.bmp" (#username# in deinen namen ändern) suchen.
Irgentwann (vllt. auch nicht) findest du die Datei und kannst sie so laden!


Dezipaitor - Mi 26.03.08 15:24

Du verwendest nicht Vista, oder?


.#R4id - Mi 26.03.08 20:20

user profile icon.#R4id hat folgendes geschrieben:
... aber ich habe nur Windows XP, deshalb kann ich dir leider nicht sagen, wo bei Vista diese Datei liegt.
Klartext: Nein, nur WinXP Prof.