Announcement

Collapse
No announcement yet.

EXE-programm und Dos aufrufen um Datei

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

  • EXE-programm und Dos aufrufen um Datei

    hallo,

    Mein programm soll ein anderes programm unter Dos aufrufen, also etwas ähnliches wie:
    C:\Verzeichnis1\>programm1.exe meindatei.txt
    In diesem Beispiel soll die Doseingabeforderung und das programm1.exe geladen werden und
    durch programm1.exe z.B einige bestimmte Zeichen in meindatei.txt gelesen werden.
    Mein problem ist es, wie in meinem Programm kann ich die Verbindung mit einer Doschnitstelle
    aufbauen, so dass im Hintergrund das, was ich beschrieben habe passiert!?
    Muss ich vielleicht Umgebungsvariablen von Dos benutzen?welche?
    Ich benutzte ein frimenspezifisches Programm, so etwas wie Turbo Pascal für Dos.
    Ich danke für ihren Hinweis
    henry

  • #2
    Hallo Henry,<BR>
    ich benutze dies<BR>
    <BR>
    function TMainForm.ExecuteFile(const FileName, Params, DefaultDir:string;
    ShowCmd: Integer): THandle;<BR>
    var<BR>
    zFileName, zParams, zDir: array[0..79] of Char;<BR>
    begin<BR>
    Result := ShellExecute(Application.MainForm.Handle, nil,<BR>
    StrPCopy(zFileName, '"'+FileName+'"'), StrPCopy(zParams, Params),<BR>
    StrPCopy(zDir, '"'+DefaultDir+'"'), ShowCmd);<BR>
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    // und hier der Aufruf zum Ausführen der DOS-Box und Aus-
    // führen der Batchdatei "BATCH.BAT"
    // "/C" als Parameter für command.com,
    // damit der Speicher wieder frei gegeben wird
    Result:= ExecuteFile('command.com',
    '/c '+extractFilePath(Paramstr(0))+'BATCH.BAT',
    extractFilePath(Paramstr(0)),
    SW_HIDE);
    end

    Comment


    • #3
      Die Char-Arrays kannst du dir sparen, wenn du einfach die String-Variablen als "pchar" castest:

      <pre>ShellExecute(wnd,<b>nil</b>,pchar(FileName),
      pchar(Params),pchar(DefaultDir),ShowCmd);</pre>

      Das Fenster-Handle ließe sich ebenfalls im Prozedurkopf angeben, denn so müsstest du die Funktion ständig anpassen, weil dein Formular bestimmt nicht immer "MainForm" heißen wird?!

      Und zu guter Letzt ein Auszug aus dem PSDK bezüglich des Rückgabewertes:<br><br>
      &gt;&gt; Returns a value greater than 32 if successful, or an<br>
      &gt;&gt; error value that is less than or equal to 32 otherwise.<br>
      &gt;&gt; The following table lists the error values.<br>
      &gt;&gt; The return value is cast as an HINSTANCE for backward<br>
      &gt;&gt; compatibility with 16-bit Windows applications.<br>
      &gt;&gt; It is not a true HINSTANCE, however.<br>
      &gt;&gt; <b>The only thing that can be done</b> with the returned<br>
      &gt;&gt; HINSTANCE is to <b>cast it to an int and compare it with<br>
      &gt;&gt; the value 32 or one of the error codes below</b&gt

      Comment

      Working...
      X