developers-forum.de

Normale Version: anderes (Windows-)Programm starten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

strohhans

Wie starte ich in meinem selbstgeschriebenen CBuilder-Programm ein anderes Windowsprogramm oder Batch-Datei z.B. wenn ich einen Button aktiviere ?

Schön wäre es, die Meldungen, die z.B. beim Ausführen einer Batch-Datei normalerweise in der DOS-Box erscheinen, in einer Liste im CBuilder-Programm anzuzeigen. Dazu würde ich gerne wissen, wie ich diese Meldungen abfangen kann.
1.) Wie man andere Programme aus C++ Builder startet findest du in den Tipps&Tricks auf der Seite zum Forum.

2.) Um die Ausgabe von einem Programm in einen Buffer umzuleiten stellt C "pipes" zur Verfügung.

Code:
#include <stdio.h>



const int MAX = 10000;



int main()

{

  int i = 0;

  char c[MAX];

  FILE *pipe;

  pipe = _popen("C:\\autoexec.bat", "r");

  while ((fscanf(pipe, "%c" ,&c[i]) != EOF) && (i < MAX))   i++;

  printf("%s\n", c);

  getchar();

  return 0;

}


N43

Normalerweise kannste du auch _spawnl() verwenden, geht einfacher und du hast mehr Optionen.

Ein kleines Beispiel von meiner Seite aus:

Code:
#include <stdlib.h>
#include <stdio.h>
#include <process.h>

int main()
{
    // 1. Par: Auszuführende Programm wird in den Seicher geladen
    // 2. Par: Das zu ladende Programm
    // 3. Par: 2 Par wird wiederholt warum, irgendwas wegen MS_DOS
    // 4. Par: Der Editor kann eine Datei geöffnet haben beim starten
    // 5. Par: STOP Parameter
    pr = _spawnl(_P_WAIT, "c:\\windows\\editor.exe", "c:\\windows\\editor.exe", "datei.txt", NULL);
   if(pr != -1)
   {
      printf("Programm gestartet.");
   }
   else
  {
     printf("Programm beendet");
  }
  exit(pr);
}

Abend,

kann man mit _spawnl auch die Ausgabe abfangen? Weil wenn nicht ist ShellExecute (zumindest unter Windows) geschickter. Beispiel zu ShellExecute hat es in der Tipps&Tricks Section.


N43
Referenz-URLs