![]() |
Mitbekommen wenn eine DosKonsole geschlossen wird.
Hallo
Ich bastel gerade an einem kleinem Konverter um MP3 Files nochmal zu komprimieren. Dazu benutze ich die lame.exe Ich habe also eine Liste mit MP3 Files, die ich in einer Schleife nacheinander komprimieren möchte. Das Problem dabei ist jetzt, das sobald ich mit folgender Function die komprimierung gestartet habe, nicht mitbekomme, wann das Dos Fenster schlossen wird, um mit der nächsten Datei zu beginnen. Hab die function hier im Forum gefunden:
Delphi-Quellcode:
Ich bekomme jedenfalls kein Handle zu einem DosFenster, das ich überprüfen könnte, um mit der nächsten datei zu beginnen.
function RunProcessGetHandle(const FileName: String): HWND;
function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; begin TList(lParam).Add(Pointer(hWnd)); Result := True; end; var SI: TStartupInfo; PI: TProcessInformation; List: TList; ProcessId: DWORD; I: Integer; begin Result := 0; List := TList.Create; try FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); // SI.dwFlags := STARTF_USESHOWWINDOW; // SI.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForInputIdle(PI.hProcess, INFINITE); if EnumWindows(@EnumWindowsProc, Longint(List)) then begin for I := 0 to List.Count - 1 do begin GetWindowThreadProcessId(Longint(List.Items[I]), ProcessId); if PI.dwProcessId = ProcessId then begin Result := Longint(List.Items[I]); Break; end; end; end; CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; finally List.Free; end; end; Aufruf:
Delphi-Quellcode:
Weiß jemand, wie ich die function umschreiben muss, um mitzubekommen wenn die konsole geschlossen wird ?
..
lamestring := extractfilepath(paramstr(0))+'lame.exe ' + _lamefiles + ' ' + _lameop ; label13.Caption := inttostr(RunProcessGetHandle(lamestring)); .. danke gruss Corgan |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Bei einem Konsolenprogramm ist es besser, wenn du auf mit Hilfe der ProcessId bzw. ProcessHandle wartest, bis das Programm fertig ist. (WaitForSingleObject)
Oder du leitest die Ausgabe gleich um. ![]() |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Zitat:
ich will ja die ausgabe garnicht umleiten, da ich bis jetzt nur functionen dazu gefunden habe, die lediglich den letzten inhalt zurückgeben, aber nicht den zur laufzeit. :( Ich habe mir mal die Hilfe zu (WaitForSingleObject) angesehen, aber so richtig werde ich daraus nicht schlau. |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
kannst du nich direkt die lame.dll aufrufen? dann sparst du dir den umweg über die DOS-Prompt...
|
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Zitat:
naja, ich habe es nicht geschafft, als Quelldatei eine MP3 zu konvertieren. Mit der Lameenc.dll konnte ich nur WAVs konvertieren. Oder hast du da ne Lösung ? :) |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
ich hab noch nie was mit der lame.dll gemacht, ich weiss nur, dass es sie gibt ;)
|
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Zitat:
Delphi-Quellcode:
if CreateProcess(...) then
begin WaitForSingleObject(PI.hProcess, INFINITE); ShowMessage('Fertig'); end; |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Ich habe für eine ähnliche Aufgabe die zweite Variante von
![]() |
Re: Mitbekommen wenn eine DosKonsole geschlossen wird.
Zitat:
danke garfield |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz