Консультация № 39191
02.04.2006, 11:07
0.00 руб.
0 3 3
Как запустить внешнюю программу?

Обсуждение

Неизвестный
02.04.2006, 12:03
общий
это ответ
Здравствуйте, Andy Greyleaf!
Есть два способа:
1. Функция WinExec(lpCmdLine: PAnsiChar, uCmdShow:Cardinal):Cardinal
из модуля Windows
2. Функция ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): Cardinal;
из модуля ShellApi

Первая выполняет команду, как командная строка Windows, а вторая запускает файл с введенными параметрами.
Думаю, из названий параметров понятно, что они означают

Пример:
WinExec(‘notepad.exe‘, SW_SHOWNORMAL);
ShellExecute(Application.Handle, nil, ‘C:\Windows\Notepad.exe‘, nil,nil,0);
Неизвестный
02.04.2006, 12:07
общий
это ответ
Здравствуйте, Andy Greyleaf!
Помимо того, что написали ранее, есть функция CreateProcess. По советам из самой майкрософт, лучше ее использовать, но не обязательноПример в приложении. Успехов.

Приложение:
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line). "MyChildProcess", // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent‘s environment block. NULL, // Use parent‘s starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { ErrorExit( "CreateProcess failed." ); } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread );
Неизвестный
02.04.2006, 15:33
общий
это ответ
Здравствуйте, Andy Greyleaf!
Для своих нужд я пользовался RxLib2.75 модуль RXShell

FileExecuteWait(const FileName, Params, StartDir: string;
InitialState: TExecState): Integer;

В функции (FileExecuteWait) используется ShellExecute из ShellAPI
Форма ответа