Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text an ein Console Programm Senden (https://www.delphipraxis.net/114319-text-ein-console-programm-senden.html)

Novo 23. Mai 2008 11:17


Text an ein Console Programm Senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo erstmal, ich glaube, dies ist sogar mein 1. Post hier...

Ich habe ein Console Programm wo man bestimmte Commands eingeben kann und mit Enter abschicken kann.
Nun möchte ich mit Delphi ein Programms schreiben, dass bestimmte Commands dort reinsendet...

Ich habe schon folgendes versucht, aber es schreibt mir den Text als Fenstername des Programms und nicht im Programm selbst:

Delphi-Quellcode:
var aWnd : Hwnd;
begin
 aWnd:=FindWindow('ConsoleWindowClass',nil); //***
  if aWnd<>0 then begin
  SendMessage(aWnd, WM_SETTEXT, 0, Integer(Pchar('listgm')));
  end;
end;
//***
hier NIL weil der Fenstername der Pfad des Programms ist.
aber der Dateiname ist immer gleich, aber ich kann nicht '*programmname.exe' machen :-(

wie sende ich jetzt in dieses DOS Fenster hinein?

Bzw. ich habe WinSpy probiert, aber der erzeugt mir keinen Code...

SCREENSHOT:
Siehe Anhang



Mfg novo

[edit=SirThornberry]Bild in Anhang gepackt - Mfg, SirThornberry[/edit]

HalloDu 23. Mai 2008 11:19

Re: Text an ein Console Programm Senden
 
Empfängt eine Console überhaupt Messages :gruebel:
Müsste man da nicht eher mit Pipes dran gehen?

rawsoul 23. Mai 2008 11:23

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von HalloDu
Empfängt eine Console überhaupt Messages :gruebel:
Müsste man da nicht eher mit Pipes dran gehen?

Vermute ich auch mal ganz stark. Dazu muesste was in der Code-Library zu finden sein.

chaosben 23. Mai 2008 11:25

Re: Text an ein Console Programm Senden
 
Du kannst es mal damit (http://svn.theunknownones.net/tuo/Co.../ConsoleTools/) versuchen.
Ist zwar nicht perfekt, aber normalerweise funktionierts. :)


btw: Willkommen in der DP! :hi:

Novo 23. Mai 2008 20:12

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von chaosben
Du kannst es mal damit (http://svn.theunknownones.net/tuo/Co.../ConsoleTools/) versuchen.
Ist zwar nicht perfekt, aber normalerweise funktionierts. :)


btw: Willkommen in der DP! :hi:

xD Wenn du mir noch sagst, wie ich diese Verwende?

Larsi 23. Mai 2008 20:16

Re: Text an ein Console Programm Senden
 
Geht es hier um ein Cheat Programm? Oder was ist eine World of Warcraft Emulation in diesem Fall?

Zu deiner Frage:
Mit Shellexecute sollte das gehen.

Klaus01 23. Mai 2008 20:27

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Larsi
Zu deiner Frage:
Mit Shellexecute sollte das gehen.

Ich denke nicht, dass das so funktionieren wird.

Er will ja nicht Parameter beim Start des Programms übergeben,
sondern dem laufendem Programm Kommmandos zukommen lassen.

Grüße
Klaus

SirThornberry 23. Mai 2008 20:33

Re: Text an ein Console Programm Senden
 
Du kannst in deiner Anwendung ein unsichtbares Fenster erzeugen und an dieses dann Nachrichten schicken.

Novo 23. Mai 2008 21:24

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Larsi
Geht es hier um ein Cheat Programm? Oder was ist eine World of Warcraft Emulation in diesem Fall?

es ist ein WoW Server Emulator... Nennt sich Mangos und ist Opensource.
Aber das ist nebensächlich...


EDIT:
Funktioniert bisher noch nix...

Klaus01 24. Mai 2008 08:20

Re: Text an ein Console Programm Senden
 
Guten Morgen,

hier wird beschrieben wie das mit named pipes funktioniert.
Allerdings muß dann das ConsolenProgramm als ChildProcess von dem
Delphi Programm gestartet werden.

Wenn das ein gangbarer Weg für Dich ist.

Grüße
Klaus

Novo 24. Mai 2008 13:33

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Klaus01
Guten Morgen,

hier wird beschrieben wie das mit named pipes funktioniert.
Allerdings muß dann das ConsolenProgramm als ChildProcess von der
Delphi Programm gestartet werden.

Wenn das ein gangbarer Weg für Dich ist.

Grüße
Klaus


Wenn bloss dein Link gehen würde... :wiejetzt:

Der.Kaktus 24. Mai 2008 13:49

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Novo
Zitat:

Zitat von Klaus01
Guten Morgen,

hier wird beschrieben wie das mit named pipes funktioniert.
Allerdings muß dann das ConsolenProgramm als ChildProcess von der
Delphi Programm gestartet werden.

Wenn das ein gangbarer Weg für Dich ist.

Grüße
Klaus


Wenn bloss dein Link gehen würde... :wiejetzt:

Link funzt prima...

Garfield 24. Mai 2008 14:04

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Der.Kaktus
Link funzt prima...

Es sind vermutlich die Links unter "Die 5 - Download the Sources" gemeint. Da bekam ich vorhin auch nur Fehlermeldungen (CGI-Script Fehler in fcolibri.exe), jetzt gehen sie. :gruebel:

Novo 25. Mai 2008 16:43

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Garfield
Zitat:

Zitat von Der.Kaktus
Link funzt prima...

Es sind vermutlich die Links unter "Die 5 - Download the Sources" gemeint. Da bekam ich vorhin auch nur Fehlermeldungen (CGI-Script Fehler in fcolibri.exe), jetzt gehen sie. :gruebel:

Und welches von den angebotenen DL ist as richtige jetzt?

Direktlink?
:S

Garfield 25. Mai 2008 17:07

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Novo
Und welches von den angebotenen DL ist as richtige jetzt?

Direktlink?
:S

:?

Dort hast Du die Auswahl:
Zitat:

Here are the source code files:

* console_read_write.zip: the CONSOLE application with Readln and Writeln (5 K)
* gui_write_read.zip: the gui project with the CreateProcess call unit (23 K)

Novo 25. Mai 2008 20:14

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Garfield
Zitat:

Zitat von Novo
Und welches von den angebotenen DL ist as richtige jetzt?

Direktlink?
:S

:?

Dort hast Du die Auswahl:
Zitat:

Here are the source code files:

* console_read_write.zip: the CONSOLE application with Readln and Writeln (5 K)
* gui_write_read.zip: the gui project with the CreateProcess call unit (23 K)


Irgendwie ist das was seltsames...
ich kann damit nichts anfangen...
:wiejetzt: :wiejetzt: :wiejetzt:

Garfield 26. Mai 2008 07:21

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Novo
Irgendwie ist das was seltsames...
ich kann damit nichts anfangen...
:wiejetzt: :wiejetzt: :wiejetzt:

Seltsam? Nö! Du hast nur abgeschaltet.

chaosben 26. Mai 2008 09:15

Re: Text an ein Console Programm Senden
 
Zitat:

Zitat von Novo
xD Wenn du mir noch sagst, wie ich diese Verwende?

In der Unit gibt es eine Komponente namens TConsoleProcess. Der übergibst du dein Pfad zu deinem Programm (Eigenschaft "CommandLine"), setzt "HookIO" auf true und führst dann "Execute" aus. Dann bekommst du über die Ausgaben per "OnStdOut" und "OnStdErr" geliefert und kannst per "Input" Daten an das laufende Programm übergeben.

Ganz einfach. :-)

Novo 28. Mai 2008 17:35

Re: Text an ein Console Programm Senden
 
Dank ChaosBen (namensvetter ftw)
habe ichs geshcafft.

Danke und kann closed werden.



Mfg novo

Codewalker 22. Aug 2009 10:38

Re: Text an ein Console Programm Senden
 
Hallo zusammen.
Ich habe das ganze auch nutzen wollen, aber es gibt wohl ein Problem mit Delphi 2009 und Unicode. Ich bekomme nur chinesische Schriftzeichen ausgegeben. Gibt es eine einfache Umwandlung dafür oder muss ich wirklich den ganzen Quellcode von TConsoleProcess anpassen?
Edit: Ein einfaches ersetzen aller Strings durch AnsiString bringt mehr Probleme als Lösungen

chaosben 22. Aug 2009 22:08

Re: Text an ein Console Programm Senden
 
Hmmm .. ein guter Einwurf.
Ich hab die Unit mal angepasst. Jetzt funktioniert es auch mit D2009.

Teekeks 23. Aug 2009 05:56

Re: Text an ein Console Programm Senden
 
Hi!
Wenn du TProcess benutzt (oder irgenteine abart davon) dann kannst du mit der folgenden kleinen Procedure alles an deine Konsole senden was du möchtest. Auch ganze befehle mit einem mal!
Delphi-Quellcode:
procedure SendCommand(cmd: string);
begin
  cmd:=cmd+#10;
  {dein Process}.Input.Write(cmd[1],Length(cmd));
end;
Wenn du den Output auch brauchs dann geht das damit:
Delphi-Quellcode:
function GetProcessOutput: string;
var AStringList: TStringList;
begin
   AStringList:=TStringList.Create;
   try
      AStringList.LoadFromStream({deim Process}.Output);
      Result:=AStringList.Strings[0];
   except
      writeln('EXCEPTION reading output');result:='';
   end;
   AStringList.Free;
end;
Gruß Teekeks


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz