Die Delphi-Programmiersprache bietet eine schnelle Möglichkeit, Anwendungen plattformübergreifend zu schreiben, zu kompilieren, zu packen und bereitzustellen. Obwohl Delphi eine grafische Benutzeroberfläche erstellt, kann es vorkommen, dass Sie ein Programm über Ihren Delphi-Code ausführen möchten. Angenommen, Sie haben eine Datenbankanwendung, die ein externes Sicherungsdienstprogramm verwendet. Das Sicherungsdienstprogramm übernimmt Parameter aus der Anwendung und archiviert die Daten, während Ihr Programm wartet, bis die Sicherung abgeschlossen ist.
Möglicherweise möchten Sie Dokumente, die in einem Dateilistenfeld angezeigt werden, öffnen, indem Sie darauf doppelklicken, ohne zuvor das zugehörige Programm zu öffnen. Stellen Sie sich ein Link-Label in Ihrem Programm vor, das den Benutzer zu Ihrer Homepage führt. Was sagen Sie zum Senden einer E-Mail direkt aus Ihrer Delphi-Anwendung über das standardmäßige Windows-E-Mail-Client-Programm??
Verwenden Sie die ShellExecute Windows API-Funktion, um eine Anwendung zu starten oder eine Datei in einer Win32-Umgebung auszuführen. In der ShellExecute-Hilfe finden Sie eine vollständige Beschreibung der zurückgegebenen Parameter und Fehlercodes. Sie können jedes Dokument öffnen, ohne zu wissen, welches Programm damit verknüpft ist. Der Link ist in der Windows-Registrierung definiert.
Hier sind einige Shell-Beispiele.
benutzt ShellApi;
…
ShellExecute (Handle, 'open'),
"c: \ Windows \ notepad.exe", nil, nil, SW_SHOWNORMAL);
ShellExecute (Handle, 'open'),
'c: \ windows \ notepad.exe',
'c: \ SomeText.txt', nil, SW_SHOWNORMAL);
ShellExecute (Handle, 'open'),
'c: \ DelphiDownload', nil, nil, SW_SHOWNORMAL);
ShellExecute (Handle, 'open'),
'c: \ MyDocuments \ Letter.doc', nil, nil, SW_SHOWNORMAL);
So finden Sie eine mit einer Erweiterung verknüpfte Anwendung.
ShellExecute (Handle, 'open'),
'http: //delphi.about.com', nil, nil, SW_SHOWNORMAL);
var em_subject, em_body, em_mail: string;
Start
em_subject: = 'Dies ist die Betreffzeile';
em_body: = 'Nachrichtentext geht hierher';
em_mail: = 'mailto: [email protected]? subject =' +
em_subject + '& body =' + em_body;
ShellExecute (Handle, 'open'),
PChar (em_mail), nil, nil, SW_SHOWNORMAL);
Ende;
So senden Sie eine E-Mail mit dem Anhang.
Im folgenden Beispiel wird die ShellExecuteEx-API-Funktion verwendet.
// Führen Sie den Windows-Rechner aus und öffnen Sie ihn
// eine Nachricht, wenn der Calc beendet wird.
benutzt ShellApi;
…
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;
Start
ExecuteFile: = 'c: \ Windows \ Calc.exe';
FillChar (SEInfo, SizeOf (SEInfo), 0);
SEInfo.cbSize: = SizeOf (TShellExecuteInfo);
mit SEInfo beginnen
fMask: = SEE_MASK_NOCLOSEPROCESS;
Wnd: = Application.Handle;
lpFile: = PChar (ExecuteFile);
ParamString kann das enthalten
Anwendungsparameter.
// lpParameters: = PChar (ParamString);
StartInString gibt das an
Name des Arbeitsverzeichnisses.
Wenn nicht angegeben, wird das aktuelle Verzeichnis verwendet.
// lpDirectory: = PChar (StartInString);
nShow: = SW_SHOWNORMAL;
Ende;
Wenn ShellExecuteEx (@SEInfo), dann beginnen
wiederholen
Application.ProcessMessages;
GetExitCodeProcess (SEInfo.hProcess, ExitCode);
bis (ExitCode STILL_ACTIVE) oder
Application.Terminated;
ShowMessage ('Rechner beendet');
Ende
else ShowMessage ('Fehler beim Starten von Calc!');
Ende;