Einzelnen Beitrag anzeigen

aramintaros

Registriert seit: 14. Mai 2008
48 Beiträge
 
#1

DosProgramm zur Echtzeit auf Memo oder sonst. umleiten

  Alt 29. Mai 2009, 23:51
Hallo DP'ler,
ich habe vor diesen Code zu benutzen, möchte aber den Schreib- und Lesevorgang im Ram haben.
Meine Frage- wie kriege ich das ganze ins Ram anstatt auf die Festplatte??
Nach einigen Tagen mit Auseinanderstezungen von CreateProzess und GetConsoleOutput ist dieser Coder übrig und ich bin erstmal am Ende.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  Memo1.Clear;
  RunCaptured('C:\', 'E:\MediaInfo\MediaInfo.exe'+ ' --Inform=Audio;%Format%\r\n%Format_Profile%\r\n%BitRate_Mode/String%\r\n%BitRate/String%\r\n%SamplingRate/String%'+
  'e:\FILME\oktober.avi', '/K '+ Edit1.Text);
  if Memo1.Lines.Strings[0]= 'MPEG Audiothen
  if Memo1.Lines.Strings[1]= 'Layer 3then
  if Memo1.Lines.Strings[2]= 'Constantthen
  if Memo1.Lines.Strings[3]= '128 Kbpsthen
  if Memo1.Lines.Strings[4]= '48.0 KHz'then
  ShowMessage('OK');
end;

function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
var
  start: TStartupInfo;
  procInfo: TProcessInformation;
  tmpName: string;
  tmp: Windows.THandle;
  tmpSec: TSecurityAttributes;
  res: TStringList;
  return: Cardinal;
begin
  Result:= False;
  try
    tmpName:= 'Test.txt';
    FillChar(tmpSec, SizeOf(tmpSec), #0);
    tmpSec.nLength:= SizeOf(tmpSec);
    tmpSec.bInheritHandle:= True;

   tmp:= Windows.CreateFile(PChar(tmpName),
           Generic_Write, File_Share_Write,
           @tmpSec, Create_Always, File_Attribute_Normal, 0);

    try
      FillChar(start, SizeOf(start), #0);
      start.cb := SizeOf(start);
      start.hStdOutput := tmp;
      start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;
      start.wShowWindow := SW_HIDE;
      if CreateProcess(nil, PChar(_exeName + ' '+ ''), nil, nil, True,
                       0, nil, PChar(_dirName), start, procInfo) then
      begin
        SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
        WaitForSingleObject(procInfo.hProcess, Infinite);
        GetExitCodeProcess(procInfo.hProcess, return);
        Result:= (return= 0);
        CloseHandle(procInfo.hThread);
        CloseHandle(procInfo.hProcess);
        Windows.CloseHandle(tmp);
        res:= TStringList.Create;
        try
          res.LoadFromFile(tmpName);
          Memo1.Lines.AddStrings(res);
        finally
          res.Free;
        end;
        Windows.DeleteFile(PChar(tmpName));
      end
      else
      begin
        Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
          'RunCaptured Error', MB_OK);
      end;
    except
      Windows.CloseHandle(tmp);
      Windows.DeleteFile(PChar(tmpName));
      raise;
    end;
  finally
  end;
end;

end.
Wenn mir da geholfen werden könnte wäre das SUPER, aber bitte nicht mit Links, habe so viel ausprobiert und bekomme nur Fehler.
Angefangen von Schreibfehlern mit Dll's und im Arbeitsspeicher, bis daß das Programm nicht gefunden werden konnte.

Mit der Funktion "function GetConsoleOutput" gibt es an dieser Stelle immer Probleme.
Delphi-Quellcode:
  if CreateProcess(nil, PChar(command), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
  StartupInfo, ProcessInfo) then
  begin
Nach ein par Änderungen wird zwar fehlerfrei compiliert, aber ich habe Probleme mit dem Speicherzugriff oder es scheint das Programm nicht zu geben, was natürlich Quatsch ist.


In meinem Übriggeblieben Code habe ich versucht mit einem MemoryStream an dieser Stelle einsteigen, aber ich mache etwas falsch, es klappt nicht, und (vermutlich) genau da brauche ich eure Unterstützung.
Vielleicht mache ich nen Denkfehler, dann schreibt mit welchen, bin nicht der Erfahrenste
Delphi-Quellcode:
    tmp:= Windows.CreateFile(PChar(tmpName),
           Generic_Write, File_Share_Write,
           @tmpSec, Create_Always, File_Attribute_Normal, 0);
Habe vor das ganze für die Mediainfo_Cli, Avidemux_CLI und FFMepg_CLI auszubauen.
  Mit Zitat antworten Zitat