Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
14-100422
warkan
2003-03-14 00:08
2003.03.31
Люди как юзать ..


14-100375
Ketmar
2003-03-12 16:20
2003.03.31
водка течёт!!!


3-100179
td
2003-03-12 19:36
2003.03.31
зачем нужны индексы?


14-100373
Дмитрий К.К.
2003-03-13 06:29
2003.03.31
Именинники 13 марта


3-100182
Alderman
2003-03-13 11:44
2003.03.31
Как сделать запрос по результатам запросов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский