Внешний вид сайта:

Выполнение приложений из кода Delphi

Допустим, имеется приложение, работающие с базой данных, которое использует внешнюю утилиту для резервного копирования данных. Эта утилита получает параметры из Вашего приложения и делает резервное копирование данных, а приложение ждет, пока утилита не закончит работу.

А с другой стороны, Вы хотели когда-либо открыть документы, которые представлены в ListBox, только дважды щелкнув по ним без необходимости открывать связанную с этим документом программу?

Наконец, вообразите Label-ссылку в Вашей программе, которая перенесет пользователя на связанную с ней страницу (запуская Internet Explorer). Кроме того, что Вы скажете относительно отсылки электронной почты непосредственно из Вашего Delphi приложения через почтового клиента Windows по умолчанию (например, MS Outlook Express)?

ShellExecute

Чтобы запустить приложение или выполнить файл в среде Win32, мы будем использовать функцию Windows API ShellExecute. Как Вы увидите, можно открыть любой тип документа из Вашей программы без того, чтобы узнавать какая программа связана с этим документом в системном реестре.

Давайте посмотрим на это в действии!

Убедитесь, что добавили ShellApi в раздел uses Вашего модуля!

Запустить Блокнот

uses { ... }, ShellApi;

{ ... }

ShellExecute(Handle, 'open', 'C:\Windows\Notepad.exe', 
    nil, nil, SW_SHOWNORMAL) ;

Открыть Untitled.txt и Запустить Блокнот

ShellExecute(Handle,'open', 'C:\Windows\Notepad.exe',
    'C:\Untitled.txt', nil, SW_SHOWNORMAL) ;

Отобразить Содержимое Папки "Temp"

ShellExecute(Handle,'open', 'C:\Temp',
    nil, nil, SW_SHOWNORMAL) ;

Выполнить Файл по Его Расширению

ShellExecute(Handle, 'open', 'C:\MyDocuments\Test.doc',
    nil, nil, SW_SHOWNORMAL) ;

Открыть Сайт или *.htm Файл с Заданным по Умолчанию Браузером

ShellExecute(Handle, 'open', 'http://delphiru.ru',
    nil, nil, SW_SHOWNORMAL) ;

Послать Электронное Письмо с Темой и Текстом Сообщения

var em_subject, em_body, em_mail : string;
begin
  em_subject := 'Это тема сообщения';
  em_body := 'Текст самого сообщения';

  em_mail := 'mailto:
 pupkin@yandex.ru?subject=' +
    em_subject + '&body=' + em_body ;

  ShellExecute(Handle,'open',
    PChar(em_mail), nil, nil, SW_SHOWNORMAL) ;
end;

Запустить Программу и Ждать Ее Завершения

Этот пример использует функцию API ShellExecuteEx:

// Запустить Калькулятор Windows и вывести
// сообщение, когда Калькулятор закончит работу.
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 может содержать
  дополнительные параметры.
}
// lpParameters := PChar(ParamString) ;
{
  StartInString определяет имя
  рабочего каталога
  Если нет, используется текущий каталог.
}
// 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('Калькулятор завершил работу') ;
   end
   else ShowMessage('Ошибка запуска Калькулятора!') ;
end;

Комментарии

Нет комментариев. Ваш будет первым!