• 0
giveaway

Ищу несколько кросс-платформенных компонентов

Вопросы

Пишу приложение, которое будет распространяться и для Винды, и для Мака. Под Винду все легко найти/сделать, а вот чтобы было кросс-платформенно - здесь трудности.

Итак нужно чем:

1) Осуществить контроль, что приложение запущено в единственном экземпляре (не давать запускать еще один такой же процесс)

2) Чем проверить, не сидит ли юзер за локальным прокси, чтобы в этом случае выдавать ему окно для ввода логина/пароля для допуска в Интернет

3) Чем определить кол-во свободного места на диске

Заранее благодарю!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 ответов на этот вопрос

  • 0
15 часов назад, giveaway сказал:

Пишу приложение, которое будет распространяться и для Винды, и для Мака. Под Винду все легко найти/сделать, а вот чтобы было кросс-платформенно - здесь трудности.

Итак нужно чем:

1) Осуществить контроль, что приложение запущено в единственном экземпляре (не давать запускать еще один такой же процесс)

2) Чем проверить, не сидит ли юзер за локальным прокси, чтобы в этом случае выдавать ему окно для ввода логина/пароля для допуска в Интернет

3) Чем определить кол-во свободного места на диске

Заранее благодарю!

 

Сильно я вам не подскажу, но программирую для винды и мака тоже. То что вы простите, это не компоненты, а функции. С прокси в маке я проблему просто решил. Даже по тупому. Просто в настройках пользователь сам указывает прокси и все. Есть в настройках - лезу по прости. Нет в настройках - не лезу. Но если нет интернета, по пишу сообщение, что сети нет, а не проси ли у вас?

Вопрос 1 - самого интересует

Вопрос 3 - скорее всего никак - ручками.

Изменено пользователем Vitaldj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
27 минут назад, Vitaldj сказал:

Вопрос 1 - самого интересует

Для Windows как и в VCL можно использовать Mutex-ы:

// в dpr-е
uses
  FMX.Forms,
  Winapi.Windows,
  ...

{$R *.res}

var MUT: THandle;

begin
  MUT := OpenMutex(MUTEX_ALL_ACCESS, false, 'MySuperProgram');
  if MUT <> 0 then Application.Terminate;
  if MUT = 0 then  MUT := CreateMutex(nil, false, 'MySuperProgram');

  Application.Initialize;
  ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я же написал, что для Windows. Директивы никто не отменял. Для мака нужно искать другое решение

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А пропустил, что вы для windows написали. Так в windows у меня есть код. Вопрос как это в маке сделать. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 

8 минут назад, Vitaldj сказал:

А пропустил, что вы для windows написали. Так в windows у меня есть код. Вопрос как это в маке сделать. 

да я уж понял))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
16 часов назад, giveaway сказал:

1) Осуществить контроль, что приложение запущено в единственном экземпляре (не давать запускать еще один такой же процесс)

чтобы прям кросс, думаю такой код подойдёт

function StartGranted: boolean;
// uses  System.IOUtils
begin
  Result := not TFile.Exists(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted'));
  TFile.WriteAllText(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted'), '');
end;

в dpr пишем

begin
  if StartGranted then
  begin
    Application.Initialize;
    Application.CreateForm(TForm2, Form2);
    Application.Run;
  end;
end.

ну и в дестрое главной формы

procedure TForm2.FormDestroy(Sender: TObject);
//uses  System.IOUtils;
begin
  TFile.Delete(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted'));
end;

Но это не точно, может есть и  аналог mutex'a в MacOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, Vitaldj сказал:

Просто в настройках пользователь сам указывает прокси и все.

Т.е. если юзер не зашел/не увидел, что в программе надо самому настроить прокси, то он сам и виноват?)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, giveaway сказал:

Т.е. если юзер не зашел/не увидел, что в программе надо самому настроить прокси, то он сам и виноват?)))

Точно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

По 1-му вопросу для MacOS:

function CheckRunning: Boolean;
var
  sl: TStringList;
  iCount: Integer;
  s: String;
begin
  sl := TStringList.Create;
  try
    GetRunningAplications(sl);

    iCount := 0;
    for s in sl do
      if SameText(s, APP_BundleID) then  //  APP_BundleID - константа с BundleID приложения
        Inc(iCount);
        
    Exit(iCount < 2)
  finally
    sl.Free;
  end;
end;

procedure GetRunningAplications(AList: TStrings);
var
  WorkSpace: NSWorkSpace;
  App: NSRunningApplicationEx;
  i: Integer;
  list: NSArray;
begin
  WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace);
  list := Workspace.runningApplications;
  if (list <> nil) and (list.count > 0) then
  begin
    for i := 0 to list.count-1 do
    begin
      App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i));
      if App.bundleIdentifier <> nil then
        AList.Add(string(App.bundleIdentifier.UTF8String))
      else
        AList.Add(String(App.executableURL.path.UTF8String));
    end;
  end;
end;

Ответ на 3-ий вопрос сам уже долго ищу

Изменено пользователем dnekrasov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Коллеги, по вопросу с прокси сервером вот что получается.

Использую компонент TIdHTTP. Для приложения под Винду делаю посредством TIdHTTP запрос в Сеть, если меня "обругивают", то я инициализирую открытие окна для заполнения настроек прокси-сервера. Если туда все правильно вбить, то соединение устанавливается норм.

А вот в случае с Маком TIdHTTP не возвращает никакой "ругани", а просто подвисает. Ну думаю ладно, сделаю сразу вывод окна настроек прокси. Ввожу их и такая же песня - TIdHTTP висит, соединения нет. Может он не очень кросс-платформенный?))

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
11 минуту назад, giveaway сказал:

Коллеги, по вопросу с прокси сервером вот что получается.

Использую компонент TIdHTTP. Для приложения под Винду делаю посредством TIdHTTP запрос в Сеть, если меня "обругивают", то я инициализирую открытие окна для заполнения настроек прокси-сервера. Если туда все правильно вбить, то соединение устанавливается норм.

А вот в случае с Маком TIdHTTP не возвращает никакой "ругани", а просто подвисает. Ну думаю ладно, сделаю сразу вывод окна настроек прокси. Ввожу их и такая же песня - TIdHTTP висит, соединения нет. Может он не очень кросс-платформенный?))

 

 

Ну если работает, то это уже кросс платформенный)) я тоже им пользуюсь. Хотя часть кода уже перевел на другой компонент. И старый наверно потихоньку переведу. NetHttp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
13 минуты назад, Vitaldj сказал:

Ну если работает, то это уже кросс платформенный))

Так нормально работает только для Винды, а под Маком куда-то улетает в бесконечность))

А NetHTTP кросс-платформенный аналог TIdHTTP? С ним можно обспечить протокол HTTPS?

Изменено пользователем giveaway

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
12 минуты назад, giveaway сказал:

С ним можно обспечить протокол HTTPS?

да, T(Net)HTTPClient как раз и работает адекватно на всех платформах

40 минут назад, giveaway сказал:

А вот в случае с Маком TIdHTTP не возвращает никакой "ругани", а просто подвисает

при запуске проверить функцией CheckInet, если нету доступа показать окно с прокси

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу