Как из моего приложения запустить другую программу?
Как из моего приложения запустить другую программу?
Существует несколько функций, позволяющих запускать другие программы. Самая простая - WinExec():
WinExec ( "C:\\path\\to\\program.exe", SW_SHOWNORMAL );
Так же существует функция ShellExecute(), которая может запускать как экзешники, так и файлы, связанные с приложениями. Например, можно "запустить" текстовый файл, как показано ниже:
ShellExecute ( hwndYourWindow, "open", "C:\\path\\to\\readme.txt", NULL, NULL, SW_SHOWNORMAL );
В данном примере, ShellExecute() ищет приложение, связанное с файлами .TXT и запускает его. ShellExecute() также позволяет устанавливать начальную директорию для приложения, а так же дополнительные параметры командной строки. За более подробным описанием функции рекомендую лезть в MSDN.
Если Вам необходимо полностью контролировать запущенное приложение, то необходимо использовать CreateProcess(). CreateProcess() имеет кучу параметров, поэтому детальное описание функции опять же смотрите в MSDN. А здесь приведу только простой пример:
STARTUPINFO si = { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi = {0}; BOOL bSuccess; bSuccess = CreateProcess ( NULL, "\"C:\\Program Files\\dir\\program.exe\"", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
Обратите внимание, что если имя программ содержит пробелы, то его необходимо заключить в кавычки, как показано выше.
Если CreateProcess() выполнена успешно, то удостоверьтесь, что дескрипторы в структуре PROCESS_INFORMATION закрыты, так как они нам больше не понадобытся.
CloseHandle ( pi.hThread ); CloseHandle ( pi.hProcess );
Конечно же, если всё, что Вам нужно, это просто запустить программу, то необходимость в CreateProcess() отпадает, а вот ShellExecute() будет в самый раз.
Оставить комментарий
Комментарии
WinExec ( "C:\path\to\program.exe", SW_SHOWNORMAL );
правильнее вот так:
WinExec ( 'C:path_toprogram.exe', SW_SHOWNORMAL );
т.е. с ОДИНАРНЫМИ ковычками...[/quote]
Давай не будем путать Visual C++ FAQ c Borland Delphi FAQ
Автор всё правильно написал :
WinExec ( "C:\\WINDOWS\\NOTEPAD.EXE", SW_SHOWNORMAL );
правильнее вот так:
WinExec ( 'C:\path_to\program.exe', SW_SHOWNORMAL );
т.е. с ОДИНАРНЫМИ ковычками...