Стартиране на друга програма

7 отговора 398 прегледа
#1

Стартиране на друга програма

Как мога да стартирам програма и да и предам параметри от Делфи?

... По добре Богат и здрав отколкото ...
Отговор
в отговор на DanailP #2

Re: Стартиране на друга програма

CreateProcess F1

Отговор
в отговор на NDeu #3

Re: Стартиране на друга програма

Или още по-просто - ShellExecute (uses ShellApi)

Отговор
в отговор на DanailP #4

Re: Стартиране на друга програма

Интересна разновидност на този въпрос е:
** Да се стартира друга програма и да се изчака нейното завършване преди да се върне управлението

Никога не е късно да...
Отговор
в отговор на Eventer #5

Re: Стартиране на друга програма

Тогава - CreateProcess + WaitForSingleObject

Отговор
в отговор на Eventer #6

Re: Стартиране на друга програма

това е от едни дружки:

type
TExecState = (esNormal, esMinimized, esMaximized, esHidden);

const
ShowCommands: array[TExecState] of Integer =
(SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);

function FileExecuteWait(const FileName, Params, StartDir: string;
InitialState: TExecState): Integer;
var
Info: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(Info, SizeOf(Info), 0);
Info.cbSize := SizeOf(TShellExecuteInfo);
with Info do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(FileName);
lpParameters := PChar(Params);
lpDirectory := PChar(StartDir);
nShow := ShowCommands[InitialState];
end;
if ShellExecuteEx(@Info) then begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
Result := ExitCode;
end
else Result := -1;
end;

Отговор
в отговор на Eventer #7

Re: Стартиране на друга програма

Един възможен отговор на този въпрос е:


var proc_info: TProcessInformation;
startinfo: TStartupInfo;
ExitCode: longword;

begin
// Initialize the structures
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startinfo, sizeof(TStartupInfo), 0);
startinfo.cb := sizeof(TStartupInfo);
// Attempts to create the process
if CreateProcess(pchar('MyProg.EXE'), nil, nil,
nil, false, NORMAL_PRIORITY_CLASS, nil, nil,
startinfo, proc_info) <> False then
begin
// The process has been successfully created
// No let's wait till it ends...
WaitForSingleObject(proc_info.hProcess, INFINITE);
// Process has finished. Now we should close it.
GetExitCodeProcess(proc_info.hProcess, ExitCode); // Optional
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
Application.MessageBox(PChar(Format('Application finished! (Exit code=%d)', [ExitCode])),
'Info', MB_ICONINFORMATION);
end
else
begin
// Failure creating the process
Application.MessageBox(pchar('Couldn''t execute the application!'),
'Error', MB_ICONEXCLAMATION);
end;
end;



P.S. Това е сваляно много отдавна, но не помня откъде .

Mixy
Отговор
в отговор на DanailP #8

Re: Стартиране на друга програма

ShellExecute(0,'open', 'c:\blabla\file.exe', 'params', nil, SW_SHOWNORMAL);

Отговор