Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
ВнизКак запустить какую-нибудь программу из своей? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c