Приложение консоли Delphi ниже читает файл Profiles.Ini и записывает имя профиля и путь из каждого раздела [ProfileX] в консоль. Это немного затянуто, но если вы не слишком знакомы с работой с файлами Ini в Delphi, она должна показать вам, как получить то, что вы хотите. Он также должен хорошо работать в Lazarus.
program FirefoxProfiles;
{$APPTYPE CONSOLE}
uses
Classes, SysUtils, IniFiles;
procedure GetProfiles(IniFile : TIniFile; Sections, Profiles : TStringList);
var
i,
j : Integer;
Find,
SectionName,
ProfileName : String;
UserName : String;
begin
UserName := GetEnvironmentVariable('UserName');
IniFile.ReadSections(Sections);
Find := 'Profile';
for i := 0 to Sections.Count - 1 do begin
SectionName := Sections[i];
if CompareText('Profile', Copy(SectionName, 1, Length(Find))) = 0 then begin
Profiles.Add(SectionName);
writeln(ProfileName);
end;
end;
for j := 0 to Profiles.Count - 1 do begin
ProfileName := Profiles[j];
writeln('Profile: ', ProfileName);
writeln('Name: ', IniFile.ReadString(ProfileName, 'Name', ''));
writeln('Path: ', IniFile.ReadString(ProfileName, 'Path', ''));
writeln;
end;
end;
var
IniFile : TIniFile;
Sections,
Profiles : TStringList;
i,
j : Integer;
begin
IniFile := TIniFile.Create('c:\Users\ma\appdata\roaming\mozilla\firefox\profiles.ini');
try
Sections := TStringList.Create;
try
Profiles := TStringList.Create;
try
GetProfiles(IniFile, Sections, Profiles);
finally
Profiles.Free;
end;
finally
Sections.Free;
end;
finally
IniFile.Free;
readln;
end
end.
Потенциальная проблема заключается в определении профиля (ов) текущего пользователя. Приведенный выше код показывает, как получить текущее имя пользователя из среды ОС, но имя пользователя не обязательно соответствует значению Name
в любом из профилей. В этом ноутбуке у меня настроено четыре профиля, но ни у одного из них Name
не совпадает с именем пользователя моей ОС. Очевидно, что если в вашей ситуации будет профиль с именем пользователя ОС, вы можете найти его, сравнив с возвращаемым значением IniFile.ReadString(ProfileName, 'Name', '')
.