» Help

Different ways of executing applications and files from Delphi

   

There are several ways of executing files and applications from Delphi. All use the ShellAPI unit and either the ShellExecute or ShellExecuteEx API functions.

Example 1

Execute NotePad:

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

Example 2

Open SomeText.txt in NotePad:

ShellExecute(
  Application.Handle,
  'open',
  'c:\windows\notepad.exe',
  'c:\SomeText.txt',
  nil,
  SW_SHOWNORMAL
);

Example 3

Execute a file according to its extension:

ShellExecute(
  Application.Handle,
  'open',
  'c:\MyDocuments\Letter.doc',
  nil,
  nil,
  SW_SHOWNORMAL
);

Example 4

Open web site or a *.htm file with the default web browser.

ShellExecute(
  Application.Handle,
  'open',
  'http://example.com',
  nil,
  nil,
  SW_SHOWNORMAL
);

Example 5

Send an e-mail with a subject and a message body:

var em_subject, em_body, em_mail: string;

begin
  em_subject := 'This is the subject line';
  em_body := 'Message body text goes here';
  em_mail := 'mailto:delphi.guide@about.com?subject=' +
    em_subject + '&body=' + em_body ;
  ShellExecute(
    Application.Handle,
    'open',
    PChar(em_mail),
    nil,
    nil,
    SW_SHOWNORMAL
  );
end;

Example 6

Execute the Windows Calculator and pop up a message when Calc is terminated.

uses ShellApi;

var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
begin
  ExecuteFile:='c:\Windows\Calc.exe';
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    //lpParameters := PChar(ParamString);
      {ParamString can contain the application parameters.}
    //lpDirectory := PChar(StartInString);
      {StartInString specifies the name of the working directory.
      If ommited, the current directory is used.}
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@SEInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    ShowMessage('Calculator terminated');
  end
  else
    ShowMessage('Error starting Calc!');
end;
Author: Shlomo Abuisak
Contributor: Shlomo Abuisak
Added: 2009-11-05
Last updated: 2009-11-05

« Return to contents »