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:
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;
Ich bekomme jedenfalls kein
Handle zu einem DosFenster, das ich überprüfen könnte, um mit der nächsten datei zu beginnen.
Aufruf:
Delphi-Quellcode:
..
lamestring := extractfilepath(paramstr(0))+'lame.exe ' + _lamefiles + ' ' + _lameop ;
label13.Caption := inttostr(RunProcessGetHandle(lamestring));
..
Weiß jemand, wie ich die function umschreiben muss, um mitzubekommen wenn die konsole geschlossen wird ?
danke
gruss Corgan