Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как запустить exe-шник?


Автор: DeMoNN 1.4.2008, 18:53
Мне надо из проги запустить другую прогу(в формате exe)
Как это сделать? Уже несколько дней  smile  smile  smile . ни в какой литературе нет. Помогите!

Автор: lukas 1.4.2008, 19:02
WinExec

или

ShellExecute из модуля ShellAPI

Автор: DeMoNN 1.4.2008, 19:10
в смысле?
Код

WinExec(имя_проги);

Автор: lukas 1.4.2008, 19:12
Код

uses ShellApi;
..
..
..
ShellExecute(0,'open',PChar(<путь к файлу>),'','',SW_SHOW);

Автор: SandyProgrammer 1.4.2008, 20:27
Код

WinExec(Pchar('C:\windows\notepad.exe'),sw_Show);

Автор: Данкинг 1.4.2008, 20:33
Я ShellExecute юзаю. Только вот вопрос: а как приостановить выполнение основной программы (на дельфи) на время работы запущенной?

Автор: THandle 1.4.2008, 20:40
А почему CreateProcess забыли назвать?


А вообще эта тема есть в интернете в таком количестве, что даже не верится что можно в течение нескольких дней не найти ответ.

Автор: lukas 2.4.2008, 17:08
CreateProcess не для новичков... лучший вариант это ShellExecute, еще советую перед открытием
делать следующее...

Код

ChDir(ExtractFileDir(Путь к проге));
ShellExecute...

Автор: neweraser 6.4.2008, 23:21
lukas, а что делает 
Код

ChDir(ExtractFileDir(Путь к проге));
?

Автор: Данкинг 6.4.2008, 23:27
Цитата(neweraser @ 7.4.2008,  00:21)
lukas, а что делает 
Код

ChDir(ExtractFileDir(Путь к проге));
?

Меняет текущий каталог на тот, в котором находится запускаемая прога.

Автор: SlaUr 7.4.2008, 11:54
Цитата

а как приостановить выполнение основной программы (на дельфи) на время работы запущенной?

Код

var codeexec:integer//Код выхода программы

Function Exec(Path,Params,WorkPath:string; Wait:Boolean; Runmode:integer):boolean;
{ Выполняет указанную программу с ожиданием ее завершения
  Path - полный путь доступа к файлу.
  Params - параметры
  WorkPath - текущий каталог. Если '' то тот же каталог где EXE
  Wait - ждать завершения программы ?
  RUNMODE - режим запуска (0 - по умолчанию SHOWNORMAL):
    SW_HIDE                Прячет окно и активизирует другое окно.
    SW_MAXIMIZE            Maximizes window.
    SW_MINIMIZE            Минимизирует определенное окно и активизирует следующее.
    SW_RESTORE             В нормальном окне
    SW_SHOW                Активирует окно в его текущем положении и размере
    SW_SHOWDEFAULT         Делает текущее положение нормальным ?
    SW_SHOWMAXIMIZED       Активизирует окно и расширяет его.
    SW_SHOWMINIMIZED       Активизирует окно и минимизирует его.
    SW_SHOWMINNOACTIVE     Минимизирует окно оставляя его активным.
    SW_SHOWNA              Отображает окно в своем текущем состоянии. Активное окно остается активным.
    SW_SHOWNOACTIVATE      Отображает окно в своем последнем размере и позиции. Активное окно остается активным.
    SW_SHOWNORMAL          Активизирует и отображает окно. Если окно минимизируется или расширяется,
                           то Окно восстанавливается в своем исходном размере и позиции.
                           Приложение должно определить этот флаг отображая окно в начале.
 


Function Exec(Path,Params,WorkPath:string; Wait:Boolean; Runmode:integer):boolean;
var
    startUpInfo : TStartupInfo;
    processInfo    : TProcessInformation;
    exeCmd      : string;
begin
  CodeExec:=0;
  result:=true;
  if Runmode=0 then Runmode:=SW_SHOWNORMAL;
  if WorkPath='' then WorkPath:=extractfilepath(path);
  if wait then begin
    if not FileExists(path) then begin result := false; exit; end;
    exeCmd := path + ' ' + params;
    FillChar(startUpInfo, SizeOf(startUpInfo), Chr(0));
         StartUpInfo.cb := SizeOf( StartUpInfo );
         StartUpInfo.dwFlags     := STARTF_USESHOWWINDOW;
         StartUpInfo.wShowWindow := runmode;
    if not CreateProcess(
             nil, PChar(exeCmd), nil, nil, false,
             CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
             PChar(ExtractFilePath(path)), startUpInfo, processInfo)
    then result := false;
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    GetExitCodeProcess(processInfo.hProcess, CodeExec);
  end else
    result:=ShellExecute(Application.Handle,'open',pchar(path),pchar(params),
                         pchar(WorkPath),RunMode)>32;
end; 



//если параметр wait установить в TRUE то ваша программа будет ждать завершения работы внешней программы.





Автор: Данкинг 8.4.2008, 23:44
Цитата(SlaUr @ 7.4.2008,  12:54)
Function Exec(Path,Params,WorkPath:string; Wait:Boolean; Runmode:integer):boolean;

Во, спасибо, при случае заюзаю.  smile 

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