Kör och kör applikationer och filer från Delphi-kod

Delphi-programmeringsspråket ger ett snabbt sätt att skriva, kompilera, paketera och distribuera applikationer över plattformar. Även om Delphi skapar ett grafiskt användargränssnitt kan det vara tider du vill köra ett program från din Delphi-kod. Låt oss säga att du har en databasapplikation som använder ett externt verktyg för säkerhetskopiering. Säkerhetskopieringsverktyget tar parametrar från applikationen och arkiverar data, medan ditt program väntar tills säkerhetskopian är klar.

Du kanske vill öppna dokument som visas i en fillista genom att dubbelklicka på dem utan att öppna det tillhörande programmet först. Föreställ dig en länketikett i ditt program som tar användaren till din hemsida. Vad säger du om att skicka ett e-postmeddelande direkt från din Delphi-applikation via standardprogrammet för e-postklienten i Windows?

ShellExecute

För att starta en applikation eller köra en fil i en Win32-miljö använder du ShellExecute Windows API-funktionen. Kolla in hjälp på ShellExecute för en fullständig beskrivning av parametrar och felkoder som returneras. Du kan öppna alla dokument utan att veta vilket program som är associerat med det-länken definieras i Windows-registret.

Här är några skalexempel. 

Kör anteckningsblock

använder ShellApi;
...
ShellExecute (Handtag, 'öppen',
'c: \ Windows \ notepad.exe', nil, nil, SW_SHOWNORMAL);

Öppna SomeText.txt med anteckningar

ShellExecute (handtag, 'öppna',
'C: \ windows \ notepad.exe',
'c: \ SomeText.txt', noll, SW_SHOWNORMAL);

Visa innehållet i mappen "DelphiDownload"

ShellExecute (handtag, 'öppna',
'c: \ DelphiDownload', nil, nil, SW_SHOWNORMAL);

Kör en fil enligt dess förlängning

ShellExecute (Handtag, 'öppen',
'c: \ MyDocuments \ Letter.doc', nil, nil, SW_SHOWNORMAL);

Så här hittar du en applikation associerad med en anknytning.

Öppna en webbplats eller en * .htm-fil med standardwebutforskaren

ShellExecute (Handtag, 'öppen',
'http: //delphi.about.com', nil, nil, SW_SHOWNORMAL);

Skicka ett e-postmeddelande med ämnet och meddelandet

var em_subject, em_body, em_mail: string;
Börja
em_subject: = 'Detta är ämnesraden';
em_body: = 'Text på meddelandekroppen går hit';
em_mail: = 'mailto: [email protected]? subject =' +
em_subject + '& body =' + em_body;
ShellExecute (handtag, 'öppna',
PChar (e-post), noll, noll, SW_SHOWNORMAL);
slutet;

Så här skickar du ett e-postmeddelande med bilagan.

Kör ett program och vänta tills det är slut

Följande exempel använder ShellExecuteEx API-funktionen.

// Kör Windows-kalkylatorn och pop-up
// ett meddelande när Calc avslutas.
använder ShellApi;
...
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;
Börja
ExecuteFile: = 'C: \ Windows \ calc.exe';
FillChar (SEInfo, SizeOf (SEInfo), 0);
SEInfo.cbSize: = SizeOf (TShellExecuteInfo);
med SEInfo börjar
fMask: = SEE_MASK_NOCLOSEPROCESS;
Wnd: = Application.Handle;
lpFile: = PChar (ExecuteFile);

ParamString kan innehålla
applikationsparametrar.

// lpParametrar: = PChar (ParamString);

StartInString anger
namnet på arbetskatalogen.
Om utelämnad används den aktuella katalogen.

// lpDirectory: = PChar (StartInString);
nShow: = SW_SHOWNORMAL;
slutet;
om ShellExecuteEx (@SEInfo) börjar
upprepa
Application.ProcessMessages;
GetExitCodeProcess (SEInfo.hProcess, ExitCode);
tills (ExitCode STILL_ACTIVE) eller
Application.Terminated;
ShowMessage ('Kalkylator avslutad');
slutet
annat ShowMessage ('Fel vid start av Calc!');
slutet;