Delphi xe6-7 OSX アプリケーション経由で端末コマンドを実行するにはどうすればよいですか? たとえば、iTunes プレイリストからすべてのトラック名を返すスクリプトを実行したいと考えています。
VCL と WINDOWS では ShellExecute() 関数を実行できますが、FMX で OSX に相当するものを見つけることができないようです。
Delphi xe6-7 OSX アプリケーション経由で端末コマンドを実行するにはどうすればよいですか? たとえば、iTunes プレイリストからすべてのトラック名を返すスクリプトを実行したいと考えています。
VCL と WINDOWS では ShellExecute() 関数を実行できますが、FMX で OSX に相当するものを見つけることができないようです。
ShellExecute は Windows OS の関数であり、VCL の関数ではありません。理由は定かではありませんが、BIBCE (Borland/Inprise/Borland/CodeGear/Embarcadero) は、VCL/FMX でコマンドを起動する機能をわざわざ実装することはありませんでしたが、他の多くのクロスプラットフォーム ツール (Qt、Python、FreePascal でさえ) はこれ。Stephen Ball がブログ投稿で関連しているように、アプリがクロスプラットフォームの場合、プラットフォームごとに IFDEF とネイティブ関数を使用する必要があります。:-(
OS X にアクセスしてテストすることはできませんが、Embarcadero の Ball は、OS X の「_system」を使用して、Windows および OS X でファイルを起動する方法を示す次のコードを提供しました。
unit FileLauncher;
interface
uses
{$IFDEF MSWINDOWS}
Winapi.ShellAPI, Winapi.Windows;
{$ENDIF MSWINDOWS}
{$IFDEF MACOS}
Posix.Stdlib;
{$ENDIF MACOS}
type
TFileLauncher = class
class procedure Open(FilePath: string);
end;
implementation
class procedure TFileLauncher.Open(const FilePath: string);
begin
{$IFDEF MSWINDOWS}
ShellExecute(0, 'OPEN', PChar(FilePath), '', '', SW_SHOWNORMAL);
{$ENDIF MSWINDOWS}
{$IFDEF MACOS}
_system(PAnsiChar('open ' + '"' + AnsiString(FilePath) + '"'));
{$ENDIF MACOS}
end;