Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Запуск файла


Автор: Borland_Delphi_6 15.7.2003, 14:15
В общем, есть файл, по формату ехе, но расширение НЕ ехе. Его нужно запустить. Все бы хорошо, winexec и никаких проблем, но нужно запустить его с парамметрами, чего функция winexec не понимает. Как иначе можно запустить эту программу из программы на Delphi. Кроме того, прога, которую надо запустить консольная, и нужно сделать так, чтобы при запуске из проги на Delphi консоль не была видна. Заранее спасибо!

Автор: p0s0l 15.7.2003, 15:00
Это можно сделать с помощью CreateProcess - проверял

Автор: Medved 15.7.2003, 15:01
используй ShellExecute.
WinExec - это устаревшая функция.

Цитата

Описание:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
  Directory: PChar; ShowCmd: Integer): HINST;

Функция может открыть или напечатать определенный файл. Исполняет как Windows-приложения так и открывает файлы-документы.
Например с файлами типа ".txt" связан Блокнот "Notepad.exe" и запуск файла "my.txt" приведет к тому, что будет запущен Блокнот и в него будет передан параметр с именем файла.

Также с помощью этой функци можно в проводнике открыть папку.

Параметры:
hWnd: Хендл родителя запускаемого приложения.

Operation: Строка определяющая команду для исполнения. Может содержать:
  "open" - открыть файл определенный параметром FileName.
  "print" - напечатать файл определенный параметром FileName.
  "explore" - открыть папку определенную параметром FileName.
Если параметр Operation равен nil, то по умолчанию выполняется операция "open".

FileName: Определяет имя файла или папки для открытия или печати. Функция может запускать файл на исполнение или документ на печать.

Parameters: определяет параметры передаваемые при запуске исполняемого приложения. Бессмысленно его использовать при запуске документа. Параметр можеть быть равен Nil.

Directory: опеределяет каталог по умолчанию(рабочий каталог). Получить\установить можно с помощью функций GetCurrentDirectory, SetCurrentDirectory.

ShowCmd: определяет режим открытия файла.

Возвращаемые значения
Функция возвращает Хендл открытого приложения или сервера DDE. Возвращаемое значение должно быть больше 32. В противном случае это ошибка:

  0 -  Системе не хватает памяти, выполняемый файл испорчен или нехватает ресурсов.
  ERROR_FILE_NOT_FOUND -  файл не найден.
  ERROR_PATH_NOT_FOUND - путь не найден.
  ERROR_BAD_FORMAT -  .EXE-Файл неверен (не-Win32.EXE или ошибка в .EXE).
  SE_ERR_ACCESSDENIED - Операционная Система отвергла доступ к файлу.
  SE_ERR_ASSOCINCOMPLETE -  неправильная или неполная ассоциация с файлом.
  SE_ERR_DDEBUSY -  транзакция DDE не может завершаться поскольку были запущены другие транзакции.

  SE_ERR_DDEFAIL -  транзакция DDE потерпела неудачу.
  SE_ERR_DDETIMEOUT - транзакция DDE не могла завершаться поскольку запрос несинхронизированный.
  SE_ERR_DLLNOTFOUND - динамическая библиотека(.DLL) не обнаружена.
  SE_ERR_FNF - файл не найден.
  SE_ERR_NOASSOC - нет приложения ассоцированного с данным типом файла.
  SE_ERR_OOM - недостаточно памяти для завершения операции.
  SE_ERR_PNF - путь не найден.
  SE_ERR_SHARE - разделение(shared) файла неверно.

Функция находится в файле shell32.dll

Автор: Borland_Delphi_6 15.7.2003, 16:05
Можно пример работы с функцией?

Автор: <Spawn> 15.7.2003, 17:43
ShellExecute(0,nil,'Mspaint.exe',nil,nil,SW_SHOWNORMAL);

Автор: Mikel 15.7.2003, 18:35
Но она откроет exe, только если он *.exe, а так по-моему спросит чем его открывать если расширение не известно или откроет каким-нть блокнотом.

Автор: Borland_Delphi_6 15.7.2003, 19:03
Если так, то это не подходит sad.gif

Автор: stab 18.7.2003, 11:42
ну, дык, CreateProcess, как уже говорили...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)