Exécuter et exécuter des applications et des fichiers à partir du code Delphi

Le langage de programmation Delphi fournit un moyen rapide pour écrire, compiler, empaqueter et déployer des applications multiplateforme. Bien que Delphi crée une interface utilisateur graphique, il y a forcément des moments où vous souhaitez exécuter un programme à partir de votre code Delphi. Disons que vous disposez d'une application de base de données qui utilise un utilitaire de sauvegarde externe. L'utilitaire de sauvegarde prend les paramètres de l'application et archive les données pendant que votre programme attend la fin de la sauvegarde.

Vous souhaitez peut-être ouvrir des documents présentés dans une zone de liste de fichiers simplement en double-cliquant dessus sans ouvrir le programme associé au préalable. Imaginez une étiquette de lien dans votre programme qui amène l'utilisateur à votre page d'accueil. Que pensez-vous de l'envoi d'un e-mail directement à partir de votre application Delphi via le programme client de messagerie Windows par défaut?

ShellExecute

Pour lancer une application ou exécuter un fichier dans un environnement Win32, utilisez la fonction API Windows ShellExecute. Consultez l'aide sur ShellExecute pour une description complète des paramètres et des codes d'erreur renvoyés. Vous pouvez ouvrir n'importe quel document sans savoir quel programme lui est associé - le lien est défini dans le registre Windows.

Voici quelques exemples de shell. 

Exécuter le bloc-notes

utilise ShellApi;

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

Ouvrez SomeText.txt avec le bloc-notes

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

Afficher le contenu du dossier "DelphiDownload"

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

Exécuter un fichier en fonction de son extension

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

Voici comment trouver une application associée à une extension.

Ouvrez un site Web ou un fichier * .htm avec l'explorateur Web par défaut

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

Envoyer un e-mail avec l'objet et le corps du message

var em_subject, em_body, em_mail: string;
commencer
em_subject: = 'Ceci est la ligne d'objet';
em_body: = 'Le texte du corps du message va ici';
em_mail: = 'mailto: [email protected]? subject =' +
em_subject + '& body =' + em_body;
ShellExecute (Handle, 'open',
PChar (em_mail), nil, nil, SW_SHOWNORMAL);
fin;

Voici comment envoyer un e-mail avec la pièce jointe.

Exécuter un programme et attendre sa fin

L'exemple suivant utilise la fonction API ShellExecuteEx.

// Exécutez la calculatrice Windows et ouvrez
// un message à la fin du Calc.
utilise ShellApi;

var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;
commencer
ExecuteFile: = 'c: \ Windows \ Calc.exe';
FillChar (SEInfo, SizeOf (SEInfo), 0);
SEInfo.cbSize: = SizeOf (TShellExecuteInfo);
avec SEInfo commencez
fMask: = SEE_MASK_NOCLOSEPROCESS;
Wnd: = Application.Handle;
lpFile: = PChar (ExecuteFile);

ParamString peut contenir le
paramètres d'application.

// lpParameters: = PChar (ParamString);

StartInString spécifie le
nom du répertoire de travail.
S'il est omis, le répertoire courant est utilisé.

// lpDirectory: = PChar (StartInString);
nShow: = SW_SHOWNORMAL;
fin;
si ShellExecuteEx (@SEInfo) commence alors
répéter
Application.ProcessMessages;
GetExitCodeProcess (SEInfo.hProcess, ExitCode);
jusqu'à (ExitCode STILL_ACTIVE) ou
Application.Terminé;
ShowMessage ('Calculatrice terminée');
fin
else ShowMessage ('Erreur lors du démarrage de Calc!');
fin;