Eseguire ed eseguire applicazioni e file dal codice Delphi

Il linguaggio di programmazione Delphi offre un modo rapido per scrivere, compilare, impacchettare e distribuire applicazioni multipiattaforma. Sebbene Delphi crei un'interfaccia utente grafica, ci sono molte volte in cui desideri eseguire un programma dal tuo codice Delphi. Supponiamo che tu abbia un'applicazione di database che utilizza un'utilità di backup esterna. L'utilità di backup prende i parametri dall'applicazione e archivia i dati, mentre il programma attende fino al termine del backup.

Forse vuoi aprire i documenti presentati in una casella di riepilogo file semplicemente facendo doppio clic su di essi senza aprire prima il programma associato. Immagina un'etichetta di collegamento nel tuo programma che porti l'utente alla tua home page. Cosa ne pensi di inviare un'e-mail direttamente dall'applicazione Delphi tramite il programma client di posta elettronica Windows predefinito?

ShellExecute

Per avviare un'applicazione o eseguire un file in un ambiente Win32, utilizzare la funzione API Windows ShellExecute. Consulta la guida su ShellExecute per una descrizione completa dei parametri e dei codici di errore restituiti. Puoi aprire qualsiasi documento senza sapere a quale programma è associato, il collegamento è definito nel registro di Windows.

Ecco alcuni esempi di shell. 

Esegui Blocco note

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

Apri SomeText.txt con Blocco note

ShellExecute (maniglia, 'aperto',
'C: \ windows \ notepad.exe',
'c: \ SomeText.txt', zero, SW_SHOWNORMAL);

Visualizza il contenuto della cartella "DelphiDownload"

ShellExecute (maniglia, 'aperto',
'c: \ DelphiDownload', zero, nil, SW_SHOWNORMAL);

Eseguire un file in base alla sua estensione

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

Ecco come trovare un'applicazione associata a un'estensione.

Aprire un sito Web o un file * .htm con Web Explorer predefinito

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

Invia un'e-mail con l'oggetto e il corpo del messaggio

var em_subject, em_body, em_mail: string;
inizio
em_subject: = 'Questa è la riga dell'oggetto';
em_body: = 'Il testo del corpo del messaggio va qui';
em_mail: = 'mailto: [email protected]? subject =' +
em_subject + '& body =' + em_body;
ShellExecute (maniglia, 'aperto',
PChar (em_mail), zero, zero, SW_SHOWNORMAL);
fine;

Ecco come inviare un'e-mail con l'allegato.

Eseguire un programma e attendere fino al termine

L'esempio seguente utilizza la funzione API ShellExecuteEx.

// Esegui il calcolatore di Windows e pop-up
// un messaggio quando Calc è terminato.
usa ShellApi;
...
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;
inizio
ExecuteFile: = 'c: \ Windows \ Calc.exe';
FillChar (SEInfo, SizeOf (SEInfo), 0);
SEInfo.cbSize: = SizeOf (TShellExecuteInfo);
con SEInfo iniziano
fMask: = SEE_MASK_NOCLOSEPROCESS;
Wnd: = Application.Handle;
lpFile: = PChar (ExecuteFile);

ParamString può contenere il file
parametri dell'applicazione.

// lpParameters: = PChar (ParamString);

StartInString specifica il
nome della directory di lavoro.
Se ommited, viene utilizzata la directory corrente.

// lpDirectory: = PChar (StartInString);
nShow: = SW_SHOWNORMAL;
fine;
se ShellExecuteEx (@SEInfo) ha inizio
ripetere
Application.ProcessMessages;
GetExitCodeProcess (SEInfo.hProcess, ExitCode);
fino a (ExitCode STILL_ACTIVE) o
Application.Terminated;
ShowMessage ('Calcolatrice terminata');
fine
else ShowMessage ('Errore durante l'avvio di Calc!');
fine;