Конференция "WinAPI" » WaitforSingleObject(ProcessInfo.hProcess,INFINITE); Убрать кнопку [D7, WinXP]
 
  • oren_yastreb (04.12.12 07:58) [0]
    Добрый день!
    Суть вопроса в том как убрать кнопку закрыть из чужого окна которое запущено процедурой 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 © (04.12.12 08:01) [1]
    не трогай консольные окна, не твои они, ты только внутри их и не зря...
  • oren_yastreb (04.12.12 08:06) [2]
    Спасибо за дельный совет brother. жалко что нет кнопки удалить((

    Находил статью в инете как работать с чужими окнами. Попробовал работает.
    Но в моем случае не получается. Пока работает консольное приложение программа замерает  и ждет завершения консольного приложения.
  • brother © (04.12.12 08:09) [3]
    я не зря это говорю...
    что делаешь в консоли?
  • oren_yastreb (04.12.12 08:09) [4]
    это сделано для того потому что после завершения консольного приложения начинается перенос обработанных файлов
  • brother © (04.12.12 09:14) [5]
    ты не ответил на [3]
  • oren_yastreb (04.12.12 10:27) [6]
    запускается команда

    WinExecAndWait32(CMDSTR,1);
    где CMDSTR=
    tempput+'Tools\lame.exe -f '+tempput+'audiorezult.wav ' +tempput+'audio.mp3' ;
  • oren_yastreb (04.12.12 10:28) [7]
    кjдирует wav в mp3. по оконьчанию окно закрывается. Сначала делал для запуска приложения visible =false но теперь сказали чтобы отображался процесс кодирования
  • Ваще имя (04.12.12 11:35) [8]

    > ты только внутри их и не зря...

    Нет, та консоль внешняя по отношению к его процессу.
  • han_malign (04.12.12 14:11) [9]

    > чтобы отображался процесс кодирования

    - у lame есть исходники, и - для особо ленивых - lame_enc.dll к которой можно найти готовый .pas интерфейс...
    Но чесать правой пяткой левое ухо конечно проще...

    З.Ы. А еще есть ACM кодек от Fraunhofer IIS, но под W7 - его обломали(лицензия вышла)...
    З.З.Ы. ACM от Lame - валится зараза где-то на перечислении кодеков(убивая заодно всю нормальную работу с ACM), а если взять еще более старый - то валится при кодировании, хотя иногда помогает FINIT перед вызовом кодирования...
  • oren_yastreb (04.12.12 14:42) [10]
    искал я pas интерфейс для lame. ненашел информацию как работать с этой библиотекой
  • DVM © (04.12.12 22:03) [11]

    > Суть вопроса в том как убрать кнопку закрыть из чужого окна
    > которое запущено процедурой WaitforSingleObject

    эта функция ничего не запускает, она как раз ждет, а запускает CreateProcess, вот между ними и воткни код, который находит нужное тебе консольное окно и гасит его кнопку закрыть.


    > но теперь сказали чтобы отображался процесс кодирования

    если консольная программа выводит этот прогресс в консоль, то проблема решаемая, например через пайпы, если не выводит - взять другую библиотеку или программу, например ffmpeg
 
Конференция "WinAPI" » WaitforSingleObject(ProcessInfo.hProcess,INFINITE); Убрать кнопку [D7, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0]