Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

Как запустить какую-нибудь программу из своей?   Найти похожие ветки 

 
EagleOwl ©   (2003-03-16 22:09) [0]

Привет, мастера! Подскажите, пожалуйста, как из своей программы запустить другую. Например, как в Autorun"ах - выбираете программу, нажимаете на кнопку, и она запускается (в данном случае - программа установки).
Заранее благодарю за помощь.


 
Романов Р.В. ©   (2003-03-16 22:23) [1]

ShellExecute? CreateProcess


 
Malder ©   (2003-03-16 23:25) [2]

может просто winexec("c:\command.com",SW_RESTORE);


 
EagleOwl ©   (2003-03-17 20:31) [3]

Если можно, объясните поподробнее.
Например, мне нужно, чтобы при нажатии на кнопку Button1 запускалась программа "D:\Program Files\MyProgram\MyProgram.exe"

procedure Form1.Button1Click(Sender: TObject)
begin
...???
end;


 
Андрей Сенченко ©   (2003-03-17 20:50) [4]

ShellExecute(0
,pchar("open")
,pchar("D:\Program Files\MyProgram\MyProgram.exe")
,NIL
,NIL
,SW_Normal
);

Видимо так


 
Malder ©   (2003-03-17 21:07) [5]

1) заголовок ShellExecute находится в модуле shellapi. Поэтому его надо подключить для использования этой функции (ну или самому экспортировать из shell32.dll)

2) Если надо просто запустить программу - используй winexec

procedure Form1.Button1Click(Sender: TObject)
begin
winexec("D:\Program Files\MyProgram\MyProgram.exe",SW_RESTORE)
end;

3) EagleOwlm ты задаешь такие примитивные вопросы - это просто ужас. Действительно, ужас.

Найди файл win32sdk.hlp - и почаще туда заглядывай. Ты там можешь найти очень много полезного.


 
blackman ©   (2003-03-18 10:05) [6]

>ты задаешь такие примитивные вопросы - это просто ужас. Действительно, ужас.
И суматоха !


 
Axis_of_Evil ©   (2003-03-18 10:07) [7]

2Malder
>EagleOwlm ты задаешь такие примитивные вопросы - это просто ужас. Действительно, ужас.

Подумай над тем, что сказал.


 
Malder ©   (2003-03-18 17:35) [8]

Axis_of_Evil, да я еще перед тем как написать подумал. А что такое ?


 
Vovchik_A ©   (2003-03-18 19:54) [9]

ShellExecute решит твои проблемы. Только в Uses ShellApi не забудь включить


 
Palladin ©   (2003-03-18 22:23) [10]

просто Axisу не кажется что это примитивный вопрос...
он очень сложный и полон загадок...


 
wicked ©   (2003-03-18 23:03) [11]

2 Андрей Сенченко ©
кстати, чрезмерное использование верба чревато.... лучше писать
ShellExecute(0
, NIL
,pchar("D:\Program Files\MyProgram\MyProgram.exe")
,NIL
,NIL
,SW_Normal
);


 
Anatoly Podgoretsky ©   (2003-03-18 23:18) [12]

wicked © (18.03.03 23:03)

Еще дальше
ShellExecute(0,
NIL,
"D:\Program Files\MyProgram\MyProgram.exe",
NIL,
NIL,
SW_Normal);




 
MsGuns ©   (2003-03-18 23:40) [13]

ShellExecute не поможет, если надо узнать, завершилась ли запущенная прога, а если завершилась, то как ? А если не завершилась, но надо ее завершить ? И вообще в доке, да и в умных книжках все советуют пользоваться CreateProcess.


 
Almaz ©   (2003-03-19 00:37) [14]

Можно и через CreateProcess - выполниться чуть быстрее, чем ShellExecute, да и Shell32.dll не понадобиться :)

function Execute(FileName: String): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Result := CreateProcess(nil, PChar(FileName), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
if Result then
begin
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end;

procedure Form1.Button1Click(Sender: TObject)
begin
Execute("D:\Program Files\MyProgram\MyProgram.exe");
end;


Удачи.


 
Style   (2003-03-19 10:03) [15]

А чтобы отследить завершила свою работу программа или нет
исползуй ShellExecuteEx

Вто пример программа запускает *.Bat файл и дожидается его завершения. Если он не заврешается в течени 25 сек она убивает процесс.

var
Info: TShellExecuteInfo;
ExitCode: DWORD;
D: Tdatetime;
Dir: string;

begin

FillChar(Info, SizeOf(Info), 0);
Info.cbSize := SizeOf(TShellExecuteInfo);

GetDir(0,Dir);

with Info do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := "send.bat";
lpParameters := "";
lpDirectory := PChar(Dir + "\EXPORT");
nShow := SW_NORMAL; //в моем случае SW_HIDE
end;

ShellExecuteEx(@Info);
d:= Now;
repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
if(TimeToStr(Now-D) = "0:00:25") then
begin
TerminateProcess(Info.hProcess, ExitCode);
d := 0;
break;
end;
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;


/// Программа завершила свою работу
end;

P.S. Только если действительно понадобится запуск *.bat
Для него желательно создать *.pif файл и проставить Check закрыть окно по завершении работы.




Страницы: 1 вся ветка

Текущий архив: 2003.03.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
6-100358
Алексей Ч.
2003-01-25 02:11
2003.03.31
ICQ


3-100196
reticon
2003-03-11 22:42
2003.03.31
поиск записи по ее номеру


1-100264
Angel[Saint]
2003-03-17 14:28
2003.03.31
Временные каталоги Виндоус


3-100191
I-Master
2003-03-11 17:12
2003.03.31
Крах баз Paradox


14-100390
CD
2003-03-07 18:15
2003.03.31
Где достать кормена, кнута (оцифрованных)?