Delphi で Shell Open を叩く


Shell Open

Delphi は GUI アプリのみならず当然ながら CUI のコンソールアプリケーションも作れます。
このときに OS の open コマンドを叩けると便利ですよね。
例えば、.html ファイルを open に渡せば関連付いたウェブブラウザが開くといった具合です。

open コマンドは Windows の場合は SehllExecute を、POSIX の場合は _system コマンドで叩けます。

具体的なコードは下記の通りです。

OpenCommand.pas
uses
  System.SysUtils

  {$IFDEF MSWINDOWS}
  , Winapi.Windows
  , Winapi.ShellAPI
  {$ENDIF}

  {$IFDEF POSIX}
  , Posix.Stdlib
  {$ENDIF POSIX}  ;

procedure ShellOpen(const iCmd: String);
{$IFDEF POSIX}
var
  M: TMarshaller;
{$ENDIF POSIX}
begin
  {$IFDEF MSWINDOWS}
  ShellExecute(0, 'open', PChar(iCmd), nil, nil, SW_SHOWNORMAL);
  {$ENDIF MSWINDOWS}
  {$IFDEF POSIX}
  _system(M.AsAnsi('open ' + iCmd).ToPointer);
  {$ENDIF POSIX}
end;

コレを使うと…

procedure OpenGoogle;
begin
  ShellOpen('http://google.co.jp/');
end;

こんな感じで自動的に関連付いたブラウザが起動します。
デフォルトの場合 Windows では IE か Edge が、macOS の場合は Safari が開きます。

小ネタでした!