Запуск программ из Delphi через ShellExecute (uses ShellApi) – Delphi Sources FAQ

Запуск программ из delphi через shellexecute (uses shellapi) – delphi sources faq


В этой статье вы научитесь применять функцию Windows
API ShellExecute. Ее применяют в тех случаях, когда мы, например, хотим
открыть файл в соответствии с его расширением, не зная, какая программа
ассоциирована с таким файлами. Итак, начнем с простого:

– Запустить блокнот (notepad)

uses ShellApi;
...ShellExecute(Handle, 'open',
  'c:Windowsnotepad.exe', nil, nil, SW_SHOWNORMAL);

– Открыть текстовый файл c:text.txt в блокноте

ShellExecute(Handle, 'open',
  'c:windowsnotepad.exe', 'c:text.txt', < BR > nil,
  SW_SHOWNORMAL);

– Показать содержимое каталога c:archive

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

– Открыть файл в соответствии с расширением

ShellExecute(Handle,
  'open', 'c:MyDocumentsLetter.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   '&amp;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:WindowsCalc.exe';
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do
    beginfMask := SEE_MASK_NOCLOSEPROCESS;
  Wnd := Application.Handle;
  lpFile := PChar(ExecuteFile);
  {ParamString can contain theapplication parameters.}// lpParameters := PChar(ParamString);{StartInString specifies thename of the working
  directory.If ommited, the current
  directory is used.}// lpDirectory := PChar(StartInString);
  nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@SEInfo) thenbegin
  repeatApplication.ProcessMessages;
  GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or
Application.Terminated;
ShowMessage('Calculator  terminated');
endelse
  ShowMessage('Error starting Calc!');
end;

Функция shellexecute

Запуск программ из Delphi через ShellExecute (uses ShellApi) - Delphi Sources FAQ


ShellExecute

Запуск внешней программы с помощью ShellExecute API.

Параметры

Возвращаемое значение

Примечания

После запуска указанной программы скрипт продолжает выполняться. Используйте функцию ShellExecuteWait(), чтобы приостановить выполнение сценария до момента завершения выполнения запущенной программы.

Если действие не указано, то используется действие по умолчанию. Действие по умолчанию указывается в реестре. Если в реестре не указано действие по умолчанию, то используется действие “open” из реестра. Если действие “open” отсутствует, тогда выполняется первое действие из перечисленных в реестре (за исключением Windows 2000).

См. также

ShellExecuteWait, Run, RunWait, RunAs, RunAsWait

Пример

Запуск программ из Delphi через ShellExecute (uses ShellApi) - Delphi Sources FAQ

; Запускает блокнот
ShellExecute(“notepad.exe”)

Exit

; Открывает .txt файл в ассоциированном по умолчанию редакторе
ShellExecute(“myfile.txt”,“”,@ScriptDir,“edit”)

; Открывает .htm файл в браузере (тоже что “Открыть” в контекстном меню)
ShellExecute(@ScriptDir&‘Help.htm’,“”,@ScriptDir,“open”)

; Открывает .htm файл в редакторе (тоже что “Изменить” в контекстном меню)
ShellExecute(@ScriptDir&‘Help.htm’,“”,@ScriptDir,“edit”)

; Открывает ссылку в браузере
ShellExecute(‘http://www.autoitscript.com/forum/’)

; Регистрация dll-файла
ShellExecute(@SystemDir&‘regsvr32.exe’,‘/s ‘&@SystemDir&‘capicom.dll’,,,@SW_HIDE)

:/>  Как перенести Windows 7, 8, 8,1 вместе со скрытыми разделами с жёсткого диска ноутбука на твердотельный накопитель SSD

Оставьте комментарий