определить профиль Firefox текущего пользователя - PullRequest
0 голосов
/ 26 октября 2019

Как узнать с помощью Delphi имя профиля и папку профиля Firefox текущего пользователя? Иногда в папке appdata\roaming для пользователя имеется несколько профилей Firefox. Поэтому мне нужно прочитать файл profile.ini.

Кто-нибудь может мне помочь с кодом Delphi?

Андреас

1 Ответ

3 голосов
/ 26 октября 2019

Приложение консоли 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', '').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...