Lonewolf Online

The website of an amateur photographer, astronomer and petrolhead.

Shell Execute

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;
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(Handle,'open', PChar(em_mail), nil, nil, SW_SHOWNORMAL);
end;

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;
...
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
begin
  ExecuteFile:='c:WindowsCalc.exe';

  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    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;
  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;

 

Share/Save/Bookmark

 

What Others Are Saying

There are no comments for this item yet.

 

Have Your Say

 

 

 

 

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment. The authors reserve the right not to publish any comments that they believe are hateful, racist, demeaning or otherwise inappropriate.

  • Random Photographs
    • Firework Night 2006
    • Yucca
    • Mitsubishi Galant
    • Dont Mess
    • Pansy dew
    • Aloe Aristata
    • Monsters Inc 1024x768
    • Sunbeams and trees
    • Noble M12
    • Fly pearched on leaf

  • Recent Additions
  • Search




  • Page copy protected against web site content infringement by Copyscape
This page was last updated on Monday, July 28th, 2008.
Unless otherwise stated, all photographs and content Copyright © 2000 - 2008 Tim Trott, All Rights Reserved. No graphics, photographs or content may be used without written permission.
Website Design and Graphics Copyright © 2005-2007 Tim Trott. home :: sitemap :: disclaimer:: contact