Execute and Run Applications and Files From Delphi Code

Man using a computer behind glass
Blend Images - DreamPictures/Brand X Pictures/Getty Images

The Delphi programming language provides a quick way to write, compile, package, and deploy applications cross-platform. Although Delphi creates a graphical user interface, there are bound to be times you want to execute a program from your Delphi code. Let's say you have a database application that uses an external backup utility. The backup utility takes parameters from the application and archives the data, while your program waits until the backup finishes.

Maybe you want to open documents presented in a file list box just by double-clicking on them without opening the associated program first. Imagine a link label in your program that takes the user to your home page. What do you say about sending an email directly from your Delphi application through the default Windows email client program?

ShellExecute

To launch an application or execute a file in a Win32 environment, use the ShellExecute Windows API function. Check out the help on ShellExecute for a full description of parameters and error codes returned. You can open any document without knowing which program is associated with it—the link is defined in the Windows Registry.

Here are some shell examples. 

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) ;

Here's how to find an application associated with an extension.

Open a Website or a *.htm File With the Default Web Explorer

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

Send an Email 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@aboutguide.com?subject=' +
em_subject + '&body=' + em_body ;

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

Here's how to send an email with the attachment.

Execute a Program and Wait Until It Finishes

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:\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) ;
{
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;
Format
mla apa chicago
Your Citation
Gajic, Zarko. "Execute and Run Applications and Files From Delphi Code." ThoughtCo, Sep. 8, 2021, thoughtco.com/execute-and-run-applications-1058462. Gajic, Zarko. (2021, September 8). Execute and Run Applications and Files From Delphi Code. Retrieved from https://www.thoughtco.com/execute-and-run-applications-1058462 Gajic, Zarko. "Execute and Run Applications and Files From Delphi Code." ThoughtCo. https://www.thoughtco.com/execute-and-run-applications-1058462 (accessed March 19, 2024).