Запуск программ из 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 '&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
ShellExecute
Запуск внешней программы с помощью ShellExecute API.
Параметры
Возвращаемое значение
Примечания
После запуска указанной программы скрипт продолжает выполняться. Используйте функцию ShellExecuteWait(), чтобы приостановить выполнение сценария до момента завершения выполнения запущенной программы.
Если действие не указано, то используется действие по умолчанию. Действие по умолчанию указывается в реестре. Если в реестре не указано действие по умолчанию, то используется действие “open” из реестра. Если действие “open” отсутствует, тогда выполняется первое действие из перечисленных в реестре (за исключением Windows 2000).
См. также
ShellExecuteWait, Run, RunWait, RunAs, RunAsWait
Пример
; Запускает блокнот
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)