Announcement

Collapse
No announcement yet.

Volle Kontrolle ueber Programme (Prozesse)

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

  • Volle Kontrolle ueber Programme (Prozesse)

    Hallo,

    hat jemand eine Idee wie man Prozesse starten kann und die <i>volle</i> Kontrolle ueber diese behaelt. Als illustres Beispliel sei folgender Wunschkonstrukt gegeben:

    startPRG('fdisk', streamIn, streamOut); <br>
    <i>{startPRG startet Programm und oeffnet 2 streams, einen fuer die Eingabe und einen fuer die Ausgabe}</i><br>
    parseOut(streamOut);
    <i>{das ware jetzt einfach eine Routine, die den Ausgabe Ausgabebildschirm von fdisk parsed und graphisch (GUI) aufbaut}</i><br>
    ...<br>
    ...<br>
    ...<br>
    ...Button1Click(...)<br>
    doCommand(streamIn, '1');<br>
    ...<br>

    Was ich damit meine ist, gibt es eine Moeglichkeit, ein Programm (Konsoleanwendung) zu starten und zur Laufzeit dessen Ausgabe auszulesen und Befehle (Kommandos) zuzuschicken (wie im Beispiel oben die Asuwahl von 1 bei fdisk).

  • #2
    Hallo,

    ja - diese Möglichkeit gibt es. Ein Beispiel für das Auslesen des Bildschirminhalts von Konsolenanwendungen ist in meinem Buch <b>Delphi Win32-Lösungen</b> (zu finden über den <i>Bücher</i>-Link hier im Forum) vorhanden.

    Auf der Delphi-CDROM befindet sich in einem Unterverzeichnis die Unit <b>sndkey32.pas</b> - dort werden die Funktionen implementiert, die für das Absenden von Tastaturkommandos an fremde Fenster zuständig sind.

    Somit ist zum Beispiel der folgende Aufruf möglich, um alle im TMemo stehenden Tastatuskommandos in dieses Konsolenfenster einzuspielen:
    <pre>
    procedure TFormMain.BitBtnSendClick(Sender: TObject);
    var
    szTitel : array[0..254] of Char;
    iCnt : Integer;
    begin
    // Consolen-Fensterzeilenbeschriftung auslesen
    GetConsoleTitle(szTitel, SizeOf(szTitel));
    StatBar.Panels[0].Text := szTitel;
    AppActivate(szTitel);
    Sleep(50);
    with MemoScript do begin
    for iCnt := 0 to Lines.Count - 1 do
    SendKeys(Lines[iCnt]);
    end;
    end;
    </pre>

    Im gleichen Buch stelle ich ausserdem im Kapitel <i>Interprozess-Kommunikation</i> einen Weg vor, wird der Eltern-Prozess für Lese- und Schreibzugriffe seine Handles vererbt um über die API-Funktion <b>GetStdHandle</b> an STD_OUTPUT_HANDLE des gestarteten Sohn-Prozesses zu kommen.

    &#10

    Comment


    • #3
      Hi Andreas,<br>
      vielen Dank, das war genau das was ich gesucht habe.<br>

      Gruss
      No"

      Comment

      Working...
      X