Announcement

Collapse
No announcement yet.

CreateProcess Eingabeaufforderung soll nicht auftauchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CreateProcess Eingabeaufforderung soll nicht auftauchen

    Hallo! Ich habe ein älteres Dos-Programm, dem ich 2 Werte übergebe und was mir einen Wert ausgibt. In der Eingabeaufforderung starte ich das so:

    PROGRAMM 10 20 > AUSGABE

    das Ergebnis in Ausgabe ist dann in etwa

    3.233400000

    Das hol ich mir dann über die Datei wieder rein.

    Und es funktioniert eigentlich alles einwandfrei - das blöde ist nur dass die Anwendung die CreateProcess aufruft einen MediaPlayer drauf hat, der eine Animation als AVI zu bestimmten ereignissen anzeigt. Es ist wichtig, dass die AVI-Datei immer beim letzten Bild stehen bleibt (was er auch automatisch macht). Wenn die MS-DOS-Eingabeaufforderung kurz aufpoppt und sich gleich wieder schließt, wird blöderweise das Fenster des MediaPlayers an der STelle gelöscht ... kann ich verhindern dass das Fenster aufpoppt irgendwie???

    Für eine Hilfe wäre ich sehr dankbar

  • #2
    Hallo Björn,<BR>
    schau mal in der TStartupInfo-Struktur nach. Da kann man wohl sowas einstellen. Hab es selber aber noch nicht probiert.<BR>
    Hier ein Code-Fragment, das ich in einem anderen Forum gefunden habe:
    <PRE>
    ...
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb:=Sizeof(StartupInfo);
    StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow:=SW_HIDE; //SW_SHOW, SW_HIDE, SW_SHOWNORMAL;
    ...
    </PRE>
    Viele Grüße,<BR>
    Marku

    Comment


    • #3
      Vielen Dank das SW_Hide hab ich gesucht ! Also dann werd ich mal den Quellcode präsentieren der einen Dos-Befehl mit Pipes und Parametern ausführt und die Eingabeaufforderung nicht anzeigt:

      function ConsoleExec(const Command: string; out ExitCode: DWORD): Boolean;
      var
      CommandLine: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      begin
      Result := False;
      CommandLine := GetEnvironmentVariable('ComSpec') + ' /C ' + Command;
      FillChar(StartupInfo, SizeOf(StartupInfo), 0);
      StartupInfo.cb := SizeOf(TStartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_HIDE;
      if CreateProcess(nil, PChar(CommandLine), nil, nil, False,
      CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP, nil, nil,
      StartupInfo, ProcessInfo) then
      try
      WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
      Result := GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
      finally
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ProcessInfo.hProcess);
      end;
      end;

      procedure TForm1.Button7Click(Sender: TObject);
      var
      Command : String;
      var
      ExitCode: DWORD;
      var
      fuzzywert: Double;
      begin

      Memo2.Clear;
      Memo2.Lines.Text:=' '+Edit1.Text+' '+Edit2.Text+' '+Edit4.Text;
      Memo2.Lines.SaveToFile('data_file');

      Command:=Copy(Application.ExeName, 0, Length(Application.ExeName)-9 )+'fismain.exe data_file maennchenrulez.fis > ausgabe';

      if ConsoleExec(Command, ExitCode) then
      Memo1.Lines.LoadFromFile('ausgabe')
      else
      ShowMessage('Kann keine DOS-Befehle ausführen - genügend Rechte vorhanden Chef??? LastError: ' + SysErrorMessage(GetLastError));

      fuzzywert:=StrToFloat( Trim(Copy( StringReplace(Memo1.Lines.Text, '.', ',', [rfReplaceAll]) ,0,7 ) ) )

      Comment

      Working...
      X