Tôi làm cách nào để thực hiện tương đương với shellexecute()
trong Lazarus dành cho máy Mac?Làm cách nào tôi có thể thực hiện tương đương với shellexecute() trong Lazarus cho máy Mac?
Trả lời
{Đây là mã để làm điều đó. Sử dụng đối tượng TProcess! }
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;
Tôi không biết liệu thư viện Lazarus đã có chức năng này chưa, nhưng nếu không bạn có thể viết phiên bản được biên dịch theo điều kiện ShellExecute() sử dụng thông tin trong Launch Services Programming Guide.
Tôi đã sử dụng thành công Shell('open ' + Filename)
trong OS X 10.4 và 10.3 có vẻ hoạt động khá tốt đối với hầu hết các loại tệp.
tôi stumbled trên open
tại dấu nhắc shell và bây giờ bỏ lỡ nó trong Cygwin/Linux, vv
ngã ba đau trên máy Mac. BSD sử dụng vfork, không phải ngã ba.
Nếu bạn muốn sử dụng ShellExecute để mở tài liệu với ứng dụng ưu tiên của nó, thì bạn có thể sử dụng thủ tục OpenDocument từ đơn vị LCLIntf.
Công cụ chuyển đổi Lazarus cũng sử dụng thay thế này cho ShellExecute, xem Lazarus wiki. Bên trong nó sử dụng mở như đã đề cập bởi RobS.