В этой статье вы научитесь применять функцию Windows API ShellExecute. Ее
применяют в тех случаях, когда мы, например, хотим открыть файл в соответствии с
его расширением, не зная, какая программа ассоциирована с таким файлами. Итак,
начнем с простого:
- Запустить блокнот (notepad)
uses ShellApi; ... ShellExecute(Handle, 'open',
'c:\Windows\notepad.exe', nil, nil, SW_SHOWNORMAL); |
- Открыть текстовый файл c:\text.txt в блокноте
ShellExecute(Handle,'open',
'c:\windows\notepad.exe','c:\text.txt', nil, SW_SHOWNORMAL);
|
- Показать содержимое каталога c:\archive
ShellExecute(Handle,'open','c:\archive', nil, nil, SW_SHOWNORMAL);
|
- Открыть файл в соответствии с расширением
ShellExecute(Handle,
'open','c:\MyDocuments\Letter.doc',nil,nil,SW_SHOWNORMAL); |
- Открыть html документ в браузере по умолчанию
ShellExecute(Handle, 'open','http://src.fitkursk.ru',nil,nil,
SW_SHOWNORMAL); |
- Послать сообщение по электронной почте
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:alex@fitkursk.ru?subject=' + em_subject + '&body=' +
em_body ; ShellExecute(Handle,'open',PChar(em_mail), nil, nil,
SW_SHOWNORMAL); end; |
- Дожидаемся окончания запущенной программы
// фрагмент кода запускает калькулятор и // выдает сообщение, когда
он закрывается 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; |
Источник: http://www.progers.ru/ |