turboPASCALverdeutlich mit
diesem Code, wie einfach es ist, das Benutzeraccount-Symbol des aktuell angemeldeten Benutzers in Windows XP auszulesen.
Die Symbole der Benutzer werden alle im Ordner
\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\User Account Pictures abgelegt. Der Dateiname des Bildes ist immer so aufgebaut:
<Benutzernme>.bmp
Da Windows nicht immer auf der Partition C liegen muss, wird das Anwendungsdaten-Verzteichnis mit folgender Funktion ermittelt:
Delphi-Quellcode:
uses
ShlObj;
function TForm1.CommonDataPath:
string;
const
CSIDL_COMMON_APPDATA = $0023;
// All Users\Application Data
var
Path:
array [0..1024]
of char;
begin
if SHGetSpecialFolderPath(
Handle, Path, CSIDL_COMMON_APPDATA, TRUE)
then
Result :=
String(Path)
else
Result := '
';
end;
Nun haben wir das Verzeichnis, es fehlt also noch der Dateiname, den wir über den Namen des angemeldeten Benutzers erhalten, den wir wie folgt auslesen können:
Delphi-Quellcode:
function GetCurrentUserName: String;
var
pcUserName : pChar; // temporary storage
dwMaxChars : dWord; // length parameter
const
MAXCHARS = 255; // max length
begin
dwMaxChars := MAXCHARS;
GetMem(pcUserName, MAXCHARS + 1);
if GetUserName(pcUserName, dwMaxChars) then
Result := String(pcUserName)
else
Result := '';
FreeMem(pcUserName);
end;
Nun muss nur noch der komplette Pfad zum Symbol zusammengesetzt werden:
Delphi-Quellcode:
UserAccPicPath := CommonDataPath + '\Microsoft\User Account Pictures\' +
GetCurrentUserName + '.bmp'
Hier ein Beispiel, das zeigt, wie man dieses Symbol in einem TImage anzeigen lassen kann. Den Benutzernamen könnt ihr natürlich auch ausgeben lassen, da diesen die Funktion GetCurrentUserName zurück gibt.
Delphi-Quellcode:
var
LgPath: string;
UserName: string;
begin
UserName := GetCurrentUserName;
LgPath := CommonDataPath + '\Microsoft\User Account Pictures\' +
UserName + '.bmp';
if FileExists(LgPath) then
begin
Image1.Picture.Bitmap.Handle :=
LoadImage(0, PChar(LgPath), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
end else
ShowMessage(format('%s'#13#10'"%s"', ['Datei nicht gefunden:', LgPath]));
end;
Anmerkung:
Wer die
Jedi VCL installiert hat, kann auch die Komponente
TJvComputerInfoEx dafür nutzen.
[edit=Luckie]Dreckfuhler korrigiert. Mfg, Luckie[/edit]
[edit=Matze]Anmerkung eingefügt. MfG, Matze[/edit]