Autor Beitrag
Frankieboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Di 04.03.08 15:43 
Hallo,

ich hab ein Windows-Programm geschrieben, dass eine Konsolenanwendung (openssl.exe) startet und Parameter übergiebt.
Die Konsole ansich bleibt dem Benutzer verborgen.
Allerdings will ich aus Debuggründen die Text-Ausgabe der openssl.exe in mein Programm umleiten - erstmal in ein Memo...

Aber wie?

Hier mal die Funktion, mit der ich programmintern die "DOS"-Konsolenanwendungen starte:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
function TFormGenerate.ExecAndWait_New(const FileName, Params: String): Integer;
var w: Cardinal;
    ExecuteInfo: TSHELLEXECUTEINFO;
{Return-Values der Funktion:
    -3: Kein Programm mit dieser Dateierweiterung verknüpft
    -2: Datei nicht gefunden
    -1: Datei konnte nicht geöffnet werden
     0: Auf Prozess kann nicht gewartet werden
     1: Ausführendes Programm wurde beendet oder durch Benutzer abgebrochen}

begin
  Result:= -1;
  FillChar(ExecuteInfo, SizeOf(TSHELLEXECUTEINFO), 0);
  With ExecuteInfo do
  begin
    cbSize:= SizeOf(TSHELLEXECUTEINFO);
    lpVerb:= 'open';
    lpFile:= PChar(Filename);
    lpParameters := PChar(Params);
    nShow:= SW_HIDE;
    fMask:= SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
    Wnd:= Application.Handle;     //Hier muss ich wohl ein anderes Handle angeben??
  end;
  if ShellExecuteEx(@ExecuteInfo) and (ExecuteInfo.hInstApp> 32then
  begin
    w:= WAIT_FAILED;
    If ExecuteInfo.hProcess <> 0 then
    Repeat
      w:= WaitForSingleObject(ExecuteInfo.hProcess, 1000);
      Application.ProcessMessages;
    Until (Abbruch= True) or (w= WAIT_OBJECT_0) or
          (w= WAIT_ABANDONED) or (w= WAIT_FAILED);

    if (w<> WAIT_ABANDONED) and (w<> WAIT_FAILED) then Result:= 1
    else Result:= 0;
  end
  else
    Case GetLastError of
      ERROR_FILE_NOT_FOUND,
      ERROR_PATH_NOT_FOUND: Result:= -2;
      ERROR_NO_ASSOCIATION: Result:= -3;
    end;
end;


Statt dem Application.Handle Da muss wohl ein anderes Handle hin? Aber wie leite ich den Text aus diesem Handle dann in ein Memo (oder Stringlist) um?


Danke schon mal,

Frankie
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.03.08 15:51 
Ich sollte mir eine Vorlage zur Beantwortung dieser Frage machen, dann muss ich das nicht jedesmal neu tippen, wenn die Frage wieder einmal kommt...

Unter diesem Link findest du eine Funktion dafür, die dir die Ausgabe des gestarteten Programms zurückliefert:
www.delphi-library.d...ewtopic.php?p=385387
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Di 04.03.08 15:52 
Du kannst beispielsweise Suche in: Delphi-Forum TDOSCOMMAND nutzen oder das hier versuchen.
Frankieboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Di 04.03.08 16:47 
Sorry,

ich hab wirklich im Forum gesucht...
Aber nix gefunden!

Trotzdem VIELEN DANK für die Antwort!

Grüße,

Frank
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Do 06.03.08 00:39 
Schau mal hier, das sollte dir helfen können.
www.delphipraxis.net...st417724.html#417724

Mer braucht man nicht. ;)

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P