Web Design that taps into the haromny and vision of your dreams.

Using Shell Execute in Delphi


Written By on in Software Engineering

361 words, estimated reading time 2 minutes.

Launch files and programs from your code using Delphi.

To launch an application or execute a file in Win32 environment we will use the ShellExecute Windows API function. Check out the help on ShellExecute for full description of parameters and error codes returned.

As you will see we can open any type of document from our program without knowing which program is associated with it (this link is defined in the Windows Registry).

Be sure to add ShellApi to your Unit's uses clause.

To Run Notepad

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

Open SomeText.txt with Notepad

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

Display the contents of the "DelphiDownload" folder

ShellExecute(Handle,'open', 'c:/DelphiDownload', nil, nil, SW_SHOWNORMAL);

Execute a file according to its extension

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

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

ShellExecute(Handle, 'open','http://delphi.about.com',nil,nil, SW_SHOWNORMAL);

Send an e-mail with the subject and the message body

var em_subject, em_body, em_mail : string;
 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(Handle,'open', PChar(em_mail), nil, nil, SW_SHOWNORMAL);

Execute a program and wait until it has finished

The following example uses the ShellExecuteEx API function.

// Execute the Windows Calculator and pop up
// a message when the Calc is terminated.
uses ShellApi;
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
ParamString can contain the
application parameters.
// lpParameters := PChar(ParamString);
StartInString specifies the
name of the working directory.
If ommited, the current directory is used.
//  lpDirectory := PChar(StartInString);
    nShow := SW_SHOWNORMAL;
  if ShellExecuteEx(@SEInfo) then begin
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or
    ShowMessage('Calculator terminated');
  else ShowMessage('Error starting Calc!');

Last updated on: Saturday 24th June 2017



There are no comments for this post. Be the first!


Leave a Reply

Your email address will not be published.

If you find something abusive or that does not comply with our terms or guidelines please flag it as inappropriate.

Copyright © 2001-2018 Tim Trott, all rights reserved. Web Design by Azulia Designs

This web page is licensed for your personal, private, non-commercial use only.

Disclaimer, Privacy & LegalSitemapContact Me