Как просто открыть дерикторию с помощью ExecuteProcess?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Как просто открыть дерикторию с помощью ExecuteProcess?

Сообщение McLion » 06.02.2015 18:44:42

Привет ребята,

подскажите как открыть дерикторию (папку) с помощью ExecuteProcess? Или может просто с Process? Должно работать на Win, Linux, Mac.

Огромное спасибо!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Как просто открыть дерикторию с помощью ExecuteProcess?

Сообщение *Rik* » 06.02.2015 19:03:51

Код: Выделить всё
function Call_ShellExecute(H: THandle; Operation, FileName, Parameters, Directory: string; L6: LongInt): Variant;
{$IfNDef WINDOWS}
var
  P: TProcess;
{$EndIf}
begin
  {$IfDef WINDOWS}
    Operation := UTF8ToSys(Operation);
    FileName := UTF8ToSys(FileName);
    Parameters := UTF8ToSys(Parameters);
    Directory := UTF8ToSys(Directory);
    Result := ShellExecute(H, PChar(Operation), PChar(FileName), PChar(Parameters), PChar(Directory), L6);
  {$Else}
    Result := 0;
    P := TProcess.Create(nil);
    try
      P.ShowWindow := swoShowNormal;
      case L6 of
        SW_SHOW: P.ShowWindow := swoShow;
        SW_MINIMIZE: P.ShowWindow:= swoMinimize;
        SW_SHOWMAXIMIZED: P.ShowWindow := swoShowMaximized;
        SW_SHOWMINIMIZED: P.ShowWindow := swoShowMinimized;
        SW_SHOWDEFAULT: P.ShowWindow := swoShowDefault;
        SW_SHOWNOACTIVATE: P.ShowWindow:= swoShowNoActivate;
        SW_HIDE: P.ShowWindow:= swoHIDE;
        SW_RESTORE: P.ShowWindow := swoRestore;
        SW_SHOWNA: P.ShowWindow:= swoShowNA;
        SW_SHOWMINNOACTIVE: P.ShowWindow:= swoshowMinNOActive;
      end;
      P.Options := [];
      P.StartupOptions:=[suoUseShowWindow];
      P.CurrentDirectory:= Directory;
      if Parameters <> '' then FileName := FileName + ' ' + Parameters;
      P.CommandLine := FileName;
      P.Execute;
    finally
      P.Free;
    end;
  {$EndIf}
end;

Для Linux параметр H: THandle и L6: LongInt - значения не имеют и игнорируются.
Пример:
Код: Выделить всё
var
  filemanager: string;
begin
{$ifdef Windows}
  filemanager = 'explorer';
{$else}
  filemanager = 'thunar';
{$endif}
call_shellexecute(Form.Handel, 'Open', filemanager, DirectoryPath, '', SW_SHOW);
end;


Для линукс, указывать в filemanager, тот файловый менеджер, который установлен в системе, для разных линуксов он разный, thunar - для XFCE.
Последний раз редактировалось *Rik* 06.02.2015 19:13:17, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Как просто открыть дерикторию с помощью ExecuteProcess?

Сообщение Helltar » 06.02.2015 19:08:51

- http://wiki.freepascal.org/Executing_External_Programs

Код: Выделить всё
uses
  ... LCLIntf;

begin
  OpenDocument('/home/');
end.
Аватара пользователя
Helltar
новенький
 
Сообщения: 22
Зарегистрирован: 11.07.2013 02:28:53

Re: Как просто открыть дерикторию с помощью ExecuteProcess?

Сообщение McLion » 06.02.2015 19:12:10

Вов... класс, спасибо вам!!!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru