Linux : ShellExecute API Muadili

Created with Sketch.

Linux : ShellExecute API Muadili

Soru:

Windows’ta ShellExecute API’sini kullanarak harici programlar çalıştırabiliyoruz. Aynı işlevi Linux ortamında nasıl yapabiliriz?

Bu hafta Linux’u biraz kurcalayalım istedik, sanırım biraz abarttık 🙂

Cevap

Yaşadığımız problemin iki ayağı vardı;

Bunlardan birincisi _PAnsiChar tipinin NEXTGEN derleyici direktifi kapsamında tanımlı olmasından kaynaklanıyordu, yani LINUX, LINUX64 gibi derleyici direktifleri altında doğrudan bir tip tanımlaması ile karşılaşamadım. Bu sorunu aşmak için Type Casting tekniğini kullandım ve sorunumu bu noktada çözmüş oldum. Yani PUTF8Char( RawByteString( filename ) ) tip sarmalamasıyla bu noktayı aşmış olduk.

Fakat yine de söz konusu klasörü bir pencerede gösterme sorununu aşmak gerekiyordu. Bu sorunu aşmak için linux’ta bu işler için “xdg-open” komutunun kullanılması gerekiyor. Bu komut tıpkı Windows’daki gibi ShellExecute‘nin yaptığı işi konsolda bir komut olarak yerine getiriyor. Sadece bir klasörü açmak için değil, aynı zamanda işletim sisteminin tanıdığı dosya tiplerine karşılık gelen ilgili programı çağırarak dosyaları da açabiliyor veya bir URL yazdıysanız onu browser’a da yükleyebiliyor…

Detaylı bilgi için aşağıdaki linke bakılabilir.

https://linux.die.net/man/1/xdg-open

implementation

uses
    System.IniFiles
  {$IFDEF MSWINDOWS}
  , WINAPI.WINDOWS
  , Winapi.ShellAPI           // ShellExecute
  {$ENDIF MSWINDOWS}
  {$IFDEF LINUX64}
  , Posix.Stdlib              // _system  >  ShellExecute eşdeğeri...
  {$ENDIF LINUX64}
  ;

  // .....
  // .....
  // .....

procedure TAna.ShowFolder( aFilePath: TFileName );
var
  aPath : String;
begin
  aPath := ExtractFilePath(aFilePath);
  {$IFDEF  MSWINDOWS}
    ShellExecute( 0, 'open', PChar ( aPath ), '', '', SW_SHOWNORMAL);
  {$ENDIF}
  {$IFDEF LINUX64}
    _system( PUTF8Char( RawByteString( 'xdg-open ' + aPath ) ) );
  {$ENDIF}
end;

Sonuç olarak hem Windows’ta hem de Linux’ta çalışan bir program olmuş oldu;

Yorum yapılmamış

Yorumunuzu ekleyin