Otevírání externích programů - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Otevírání externích programů

4. června 2001, 00.00 | Chtěli jste někdy otevřít textový soubor ve vámi zadaném editoru z vašich Delphi aplikací? Chtěli jste otevřít prohlížeč s vaší www stránkou? Jestli ano, přečtěte si tento článek.

Úvod


    Málokdy při vytváření programů budete používat jen tu svoji aplikaci, aniž byste potřebovali zobrazit textový soubor s napovědou v poznámkovém bloku. Kolikrát už jste chtěli otevřít nějaký program ze své Delphi aplikace? Kolikrát jste si přáli, aby se při kliknutí na obrázek ve vašem programu spustil prohlížeč s Vámi zadanou internetovou adresou? V tomto článku si ukážeme jak tohle všechno provést a ještě něco navíc.


ShellExecute


Dnes Vám ukáži, jak spouštet externí programy z Vašich Delphi aplikací. K tomu budeme potřebovat Win32 API funkci ShellExecute(). Pro používání této funkce je třeba přidat unitu ShellApi do klauzule uses v části interface. ShellExecute má mnoho možností využití. Můžete spouštět jak samotné programy, tak také programy s parametrem. Tím parametrem může být jméno souboru nebo www adresa, kterou chcete zobrazit v internetovém prohlížeči. Tím možnosti této funkce samozřejmě nekončí. ShellExecute umožňuje otevření e-mailového klienta s předem vyplněnou adresou, tělem a  předmětem. Nebo můžete spustit aplikaci a počkat na její ukončení.

uses ShellApi;
...
ShellExecute(Handle, 'open', 'c:\Windows\cdplayer.exe', nil, nil, SW_SHOWNORMAL);

    A takhle spustíte soubor textovysoubor.txt v notepadu :

ShellExecute(Handle, 'open', 'c:\Windows\notepad.exe', ' textovysoubor.txt', nil, SW_SHOWNORMAL);

   Vypíše obsah adresáře:

ShellExecute(Handle, 'open', 'c:\Windows', nil, nil, SW_SHOWNORMAL);

    Tímto způsobem otevřete soubor nejakytext.doc ve svém textovém editoru, který máte nastavený pro otevírání souborů s příponou .doc :

ShellExecute(Handle, 'open', 'c:\Windows\nejakytext.doc', nil, nil, SW_SHOWNORMAL);

    Pokud chcete otevřít internetový prohlížeč s určtou adresu, tak to musíte udělat takto:

ShellExecute(Handle, 'open', 'https://www.builder.cz', nil, nil, SW_SHOWNORMAL);

    A takto pošlete e-mail pomocí Win32 API funkce ShellExecute :

var predmet, telo, email : string;
begin
predmet := 'Předmět';
telo := 'Tělo zprávy';

email := '?subject=' +
   predmet + '&body=' + telo ;

ShellExecute(Handle,'open',
   PChar(email), nil, nil, SW_SHOWNORMAL);
end;

Má to ale jednu nevýhodu, funkce ShellExecute() spustí MS Outlook a teprve z něj e-mail odešlete. Možná by bylo výhodnější použít komponenty NMSMTP ze záložky FastNet (Delphi 5) způsobem, který jsem popsal ve svém předchozím článku (Posílání e-mailů a SMS).
    Ale co když potřebujeme spustit externí aplikaci a pokračovat v provádění kódu po jejím ukončení? I to je s funkcí ShellExecute() možné. Zde uvádím příklad, jak by se to dalo vyřešit:

var
  SEInfo:TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
begin
  ExecuteFile:='c:\Windows\cdplayer.exe'; 
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do begin
  fMask := SEE_MASK_NOCLOSEPROCESS;
  Wnd := Application.Handle;
   lpFile := PChar(ExecuteFile);
  nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@SEInfo) then begin
   repeat Application.ProcessMessages;
    GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    ShowMessage('Program ukončen!');
  end
else ShowMessage('Chyba při spouštění programu!');
end;

    Ješte bych se rád stručně zmínil o spouštění programu v 16-ti bitových Delphi aplikacích. K tomu se využívá funkceWinExec() a její používání je obdobné jako ShellExecute.

WinExec('c:\windows\cdplayer.exe', SW_SHOWNORMAL);

WinExec('c:\windows\notepad.exe C:\nejakytext.txt', SW_SHOWNORMAL); 

Závěr

   Jak je vidět, spouštení externích programů z Delphi aplikaci není nic složitého. Funkce ShellExecute() muže velice dobře pomoci při řízení spolupráce mezi dvěma programy. Možná se Vám to bude hodit do vašeho freewarového programu s bannerovou reklamou, nebo do vašeho souborového manažeru.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: