Wie kann ich das Äquivalent von shellexecute()
in Lazarus für einen Mac durchführen?Wie kann ich das Äquivalent von shellexecute() in Lazarus für einen Mac durchführen?
Antwort
{Hier Code ist, es zu tun. Verwenden Sie das TProcess-Objekt! }
uses Process;
...
procedure DoProcess;
Var
Proc : TProcess;
Begin
Proc := TProcess.Create(nil);
try
Proc.CommandLine := '/Applications/MyApp.app';
PRoc.Options := Proc.Options + [poWaitOnExit];
Proc.CommandLine := Proc.CommandLine + ' -someparam';
PRoc.Execute;
finally
Proc.free;
end;
End;
Ich weiß nicht, ob Lazarus Bibliotheken haben bereits diese Funktionalität eingewickelt haben, aber wenn nicht können Sie eine bedingt kompilierte Version von ShellExecute() mit der Info im Launch Services Programming Guide schreiben.
Ich habe erfolgreich Shell('open ' + Filename)
in OS X 10.4 und 10.3 verwendet, die für die meisten Dateitypen ziemlich gut zu funktionieren scheint.
Ich stolperte über open
am Shell-Prompt und verpassen es jetzt in Cygwin/Linux usw.
Gabel tut weh auf Mac. BSDs verwenden vfork, nicht fork.
Wenn Sie mit ShellExecute ein Dokument mit der bevorzugten Anwendung öffnen möchten, können Sie die OpenDocument-Prozedur aus der LCLIntf-Einheit verwenden.
Das Lazarus-Konvertierungstool verwendet diesen Ersatz auch für ShellExecute, siehe Lazarus wiki. Intern verwendet es Open wie von RobS erwähnt.