Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.255.44] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Задача такая: запустить другое приложение и дождаться его завершения.
Подозреваю, что подобные вопросы задаются очень часто Но всё же. Ознакомившись с ФАКом и поискав в интернете, увидел, что большинство методов заключается в использовании функции CreateProcess, через которую мы получаем handle созданного процесса, а потом уже используем WaitForSingleObject. Мне необходимо, чтобы запущенное приложение не показывалось. В функциях WinExec и ShellExecute есть специальные параметры, куда пишешь к примеру SW_HIDE. У CreateProcess я такого не нашёл. В общем нужно дождаться завершения другой программы, которая в процессе работы не должна показываться. Как так сделать? |
Сообщ.
#2
,
|
|
|
в недра параметра StartupInfo загляни
|
Сообщ.
#3
,
|
|
|
Заглянул.
Сделал вот так перед вызовом CreateProcess: var si : TStartupInfo; ... begin ... si.wShowWindow:=SW_HIDE; ... Всё равно вызываемое приложение мелькает. |
Сообщ.
#4
,
|
|
|
А флаги кто будет ставить?
|
Сообщ.
#5
,
|
|
|
Цитата CodeMonkey @ А флаги кто будет ставить? А это как? Поясните пожалуйста |
Сообщ.
#6
,
|
|
|
Покажи полностью код
|
Сообщ.
#8
,
|
|
|
Цитата hanky @ Сделал вот так перед вызовом CreateProcess: Цитата hanky @ Всё равно вызываемое приложение мелькает. Цитата CodeMonkey @ А флаги кто будет ставить? Цитата hanky @ А это как? Поясните пожалуйста Цитата wShowWindow Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESHOWWINDOW. wShowWindow может быть равен любой из констант вида SW_константа определённых в WINUSER.H. Для GUI-процессов wShowWindow задаёт значение по умолчанию первого вызова функции ShowWindow. Параметр функции ShowWindow nCmdShow игнорируется. В последующих вызовах функции ShowWindow, член wShowWindow используется, если параметр функции ShowWindow nCmdShow установлен в SW_SHOWDEFAULT |
Сообщ.
#9
,
|
|
|
P.O.D, medved_68, спасибо, приму к сведению.
Ещё есть такой вопрос. Мне необходимо прикрутить сторонню программу. Запускается она через .bat файл. То есть, если в батнике написано "Name.exe", то результаты выводятся на экран, если "Name.exe> log.txt" - то в файл. При попытке запустить батник через WinExec или ShellExecute выдаётся сообщение, что файл Name.exe не найден. Как быть? |
Сообщ.
#10
,
|
|
|
Установить нужный рабочий каталог.
Цитата HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); |
Сообщ.
#11
,
|
|
|
Цитата hanky @ При попытке запустить батник через WinExec или ShellExecute выдаётся сообщение, что файл Name.exe не найден. Как вариант - передай в ShellExecute полный путь до файла Name.exe |
Сообщ.
#12
,
|
|
|
arj99, заработало. Спасибо.
Цитата medved_68 @ medved_68, не, так не пойдёт. Прога работает так, что её надо вызывать обязательно через .bat файл.Как вариант - передай в ShellExecute полный путь до файла Name.exe В общем вопрос, я думаю, решён. Всем спасибо. |
Сообщ.
#13
,
|
|
|
Цитата hanky @ ... так не пойдёт. Прога работает так, что её надо вызывать обязательно через .bat файл ... и в чем проблема передавать полный путь преобразованный функцией ShortFileName .... функция может быть такой ... function ShortFileName(const FileName: string): string; var aTmp: array[0..255] of Char; begin if GetShortPathName(PChar(FileName), aTmp, Sizeof(aTmp)) = 0 then begin Result:= FileName; end else begin Result:= StrPas (aTmp); end; end; после получения "короткого имени" переводим его в кодировку CP-866 записываем в файл и можно работать .... |
Сообщ.
#14
,
|
|
|
andrew.virus, что такое "короткое имя"? И как это может помочь запустить прогу через .bat файл, который я запускаю из своей программы?
|
Сообщ.
#15
,
|
|
|
Цитата hanky @ что такое "короткое имя"? И как это может помочь запустить прогу через .bat файл, который я запускаю из своей программы? как пример нужно передать в файл путь ... D:\Мои документы\Санитарные_правила_и_нормы\СанПиН-2_2_4_1294-03.2003-06-15\СанПиН-2_2_4_1294-03-20030615.htm после обработки получаем такой путь ... D:\МОИДОК~1\САНИТА~1\САНПИН~2.200\САНПИН~1.HTM такое бывает нужно, поскольку bat-файл работает в режиме эмуляции MS-DOS и требователен к именам файлов, например, программы не могут принимать пути к файлам в имени которых есть пробелы (имеются ввиду полные имена) в этом случае и удобны "короткие имена" файлов ... |