-
Добрый день! Суть вопроса в том как убрать кнопку закрыть из чужого окна которое запущено процедурой WaitforSingleObject Вот так я ее вызываю WinExecAndWait32(CMDSTR,1); А вот и сама процедура
function WinExecAndWait32(FileName:String; Visibility : integer; smallstr:string):integer; var zAppName:array[0..512] of char; zCurDir:array[0..255] of char; WorkDir:String; StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin StrPCopy(zAppName,FileName); GetDir(0,WorkDir); StrPCopy(zCurDir,WorkDir); FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, { указатель командной строки } nil, { указатель на процесс атрибутов безопасности } nil, { указатель на поток атрибутов безопасности } false, { флаг родительского обработчика } CREATE_NEW_CONSOLE or { флаг создания } NORMAL_PRIORITY_CLASS, nil, { указатель на новую среду процесса } nil, { указатель на имя текущей директории } StartupInfo, { указатель на STARTUPINFO } ProcessInfo) then Result := -1 { указатель на PROCESS_INF }
else begin WaitforSingleObject(ProcessInfo.hProcess,INFINITE); end; end;
Программа запускает консольное приложение через Cmd и мне нужно пока оно работает запретить хотябы закрытие этого окна. Убрать или заблокировать кнопку закрыть.
Подскажите как это сделать?
-
не трогай консольные окна, не твои они, ты только внутри их и не зря...
-
Спасибо за дельный совет brother. жалко что нет кнопки удалить((
Находил статью в инете как работать с чужими окнами. Попробовал работает. Но в моем случае не получается. Пока работает консольное приложение программа замерает и ждет завершения консольного приложения.
-
я не зря это говорю... что делаешь в консоли?
-
это сделано для того потому что после завершения консольного приложения начинается перенос обработанных файлов
-
ты не ответил на [3]
-
запускается команда
WinExecAndWait32(CMDSTR,1); где CMDSTR= tempput+'Tools\lame.exe -f '+tempput+'audiorezult.wav ' +tempput+'audio.mp3' ;
-
кjдирует wav в mp3. по оконьчанию окно закрывается. Сначала делал для запуска приложения visible =false но теперь сказали чтобы отображался процесс кодирования
-
> ты только внутри их и не зря...
Нет, та консоль внешняя по отношению к его процессу.
-
> чтобы отображался процесс кодирования
- у lame есть исходники, и - для особо ленивых - lame_enc.dll к которой можно найти готовый .pas интерфейс... Но чесать правой пяткой левое ухо конечно проще...
З.Ы. А еще есть ACM кодек от Fraunhofer IIS, но под W7 - его обломали(лицензия вышла)... З.З.Ы. ACM от Lame - валится зараза где-то на перечислении кодеков(убивая заодно всю нормальную работу с ACM), а если взять еще более старый - то валится при кодировании, хотя иногда помогает FINIT перед вызовом кодирования...
-
искал я pas интерфейс для lame. ненашел информацию как работать с этой библиотекой
-
> Суть вопроса в том как убрать кнопку закрыть из чужого окна > которое запущено процедурой WaitforSingleObject
эта функция ничего не запускает, она как раз ждет, а запускает CreateProcess, вот между ними и воткни код, который находит нужное тебе консольное окно и гасит его кнопку закрыть.
> но теперь сказали чтобы отображался процесс кодирования
если консольная программа выводит этот прогресс в консоль, то проблема решаемая, например через пайпы, если не выводит - взять другую библиотеку или программу, например ffmpeg
|