befehle an eine Konsole
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
befehle an eine Konsole
ist es möglich das ich mit einer Lazarus anwendung(gui) eine konsole steuern kann?
also ich hab ein bat script und dann öffnet sich ja auch so ne console wenn man echo off macht,
kann ich auch das echo ausschalten und dann mit lazarus die nachrichten auffangen und gegebenfalls auch befehle senden?
also ich hab ein bat script und dann öffnet sich ja auch so ne console wenn man echo off macht,
kann ich auch das echo ausschalten und dann mit lazarus die nachrichten auffangen und gegebenfalls auch befehle senden?
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: befehle an eine Konsole
ich glaub dafür ist TProcess da (System) ist standartmäßig bei lazarus dabei.
Code: Alles auswählen
Signatur := nil;
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: befehle an eine Konsole
Das könnte einfach eine unklare Formulierung deinerseits sein, aber die Konsole öffnet sich soweit ich weiß bei jedem Batch-Script. Der Befehl "@echo off" unterbindet lediglich, dass vor jedem Befehl der aktuelle Pfad ausgegeben wird.Bauer321 hat geschrieben:also ich hab ein bat script und dann öffnet sich ja auch so ne console wenn man echo off macht
Ein Batch-Script kannst du TProcess starten (wie MAC schreibt); du kannst damit aber auch direkt die cmd.exe starten und diese dann noch weitere Befehl ausführen lassen, bevor dein Batch-Script gestartet wird (gib dazu einfach mal "help cmd" in der Konsole ein).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: befehle an eine Konsole
hmm ja also ich würde gerne ein programm schrieben welches eine java datei ausführt(diese starte ich momentan via batch)
das programm soll dann die console ausblenden den output in einem tmemo oder ähnlichem ausgeben
außerdem soll man über das programm befehle senden können welche man sonst in der konsole eingibt.
was ich davon habe: ich kann zeitgesteurt(mit nem Timer oder solchen sachen) befehle ausführen lassen.
außerdem kann ich sozusagen ein gui für die konsolenanwendung erstellen was die verwendung ein wenig erleichtert.
ich bräuchte halt mal nen paar denkanstöße und/oder auch beispiele da ich so nicht weiß wie ich das anstellen soll
das programm soll dann die console ausblenden den output in einem tmemo oder ähnlichem ausgeben
außerdem soll man über das programm befehle senden können welche man sonst in der konsole eingibt.
was ich davon habe: ich kann zeitgesteurt(mit nem Timer oder solchen sachen) befehle ausführen lassen.
außerdem kann ich sozusagen ein gui für die konsolenanwendung erstellen was die verwendung ein wenig erleichtert.
ich bräuchte halt mal nen paar denkanstöße und/oder auch beispiele da ich so nicht weiß wie ich das anstellen soll
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: befehle an eine Konsole
http://wiki.lazarus.freepascal.org/Exec ... rograms/de" onclick="window.open(this.href);return false;
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: befehle an eine Konsole
da habe ich gestern auch schonmal geguckt das hat mir aber nicht wirklich weitergeholfen
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 109
- Registriert: Sa 1. Mär 2008, 15:19
- OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
- CPU-Target: x64
- Kontaktdaten:
Re: befehle an eine Konsole
Ich habe das so bei meiner IDE gelöst
Muss man dann natürlich anpassen mit Dateiname etc.
Code: Alles auswählen
begin
if fileexists(dateiname) then
begin
AProcess := TProcess.Create(nil);
AStringList := TStringList.Create;
chdir (ExtractFilePath( interpreter));
AProcess.CommandLine := interpreter +' '+dateiname;
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.ShowWindow:=swoHide; //hide the console window
AProcess.Execute;
AStringList.LoadFromStream(AProcess.Output);
output:=AStringList.text;
AStringList.Free;
AProcess.Free;
if output<>'' then
Memo1.Text:=Memo1.Text+output;
end;
end;
Mit besten Grüßen,
Cybermonkey
Cybermonkey
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: befehle an eine Konsole
damit komm ich leider auch nicht wirklich weiter.
also irgendwie muss ich den output ja regelmäßig abrufen.
also irgendwie muss ich den output ja regelmäßig abrufen.
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: befehle an eine Konsole
ich habe bisher folgendes aber der output wird nicht richtig abgefangen/aufgefangen
also der process der wird gestartet und auch richtig beendet nur das mit dem ouput geht gar nicht und input auch nciht
http://www7.pic-upload.de/02.04.11/og6lw3jp2mfl.jpg
also der process der wird gestartet und auch richtig beendet nur das mit dem ouput geht gar nicht und input auch nciht
http://www7.pic-upload.de/02.04.11/og6lw3jp2mfl.jpg
Code: Alles auswählen
unit umain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, usettings, process;
type
{ TFMain }
TFMain = class(TForm)
bstart: TButton;
bstop: TButton;
binput: TButton;
Button3: TButton;
einput: TEdit;
Label1: TLabel;
Label2: TLabel;
moutput: TMemo;
Process1: TProcess;
toutput: TTimer;
procedure bstartClick(Sender: TObject);
procedure bstopClick(Sender: TObject);
procedure binputClick(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Input(InputEdit:TEdit);
procedure objects(opt : boolean);
procedure toutputTimer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
FMain: TFMain;
implementation
{$R *.lfm}
{ TFMain }
procedure TFMain.FormDestroy(Sender: TObject);
begin
if Process1.Running then
Process1.Terminate(0);
end;
procedure TFMain.Button3Click(Sender: TObject);
begin
FSettings.Visible := not FSettings.Visible;
if FSettings.Visible = true
then Button3.caption := 'hide settings'
else Button3.caption := 'show settings';
end;
procedure TFMain.binputClick(Sender: TObject);
begin
Input(einput);
end;
procedure TFMain.bstartClick(Sender: TObject);
var
AStringlist : TStringlist;
output : String;
begin
if not Process1.Running then begin
objects(true);
Process1.CommandLine := FSettings.epath.Text;
Process1.Execute;
AStringList := TStringList.Create;
AStringList.LoadFromStream(Process1.Output);
output:=AStringList.text;
AStringList.Free;
if output<>'' then
moutput.Text:=moutput.Text+output;
end;
end;
procedure TFMain.bstopClick(Sender: TObject);
begin
if Process1.Running then begin
Process1.Terminate(0);
objects(false);
end;
end;
procedure TFMain.Input(InputEdit:TEdit);
var
command: string;
begin
if Process1.Running then begin
command := InputEdit.text;
Process1.Input.Write(command[1], length(command));
end;
end;
procedure TFMain.objects(opt : boolean);
begin
bstart.enabled := not opt;
bstop.enabled := opt;
moutput.enabled := opt;
einput.enabled := opt;
binput.enabled := opt;
FSettings.epath.enabled := not opt;
toutput.enabled := opt;
end;
procedure TFMain.toutputTimer(Sender: TObject);
var
AStringlist : TStringlist;
output : String;
begin
AStringList := TStringList.Create;
AStringList.LoadFromStream(Process1.Output);
output:=AStringList.text;
AStringList.Free;
if output<>'' then
moutput.Text:=moutput.Text+output;
Application.Processmessages;
end;
end.
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 109
- Registriert: Sa 1. Mär 2008, 15:19
- OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
- CPU-Target: x64
- Kontaktdaten:
Re: befehle an eine Konsole
Du hast die TProcess options nicht gesetzt. Siehe hier: http://www.freepascal.org/docs-html/fcl ... tions.html
Du willst den Output ja regelmäßig abrufen. Bei meinem Beispiel wird ja auf Ende des Prozesses gewartet. Evtl. musst du einen extra Thread starten; ein Timer reicht unter Umständen nicht.poUsePipes - Use pipes to redirect standard input and output.
Mit besten Grüßen,
Cybermonkey
Cybermonkey
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: befehle an eine Konsole
ja dumm von mir die optionen habe ich gestzt in der komponente TProcess habe nur vergessen das zu erwähnen:
diese optionen hab ich da ausgewählt:

das mit dem thread werde och mir gleich mal ansehen
brauch ich dafür dann multithreading?
diese optionen hab ich da ausgewählt:

das mit dem thread werde och mir gleich mal ansehen
brauch ich dafür dann multithreading?
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 109
- Registriert: Sa 1. Mär 2008, 15:19
- OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
- CPU-Target: x64
- Kontaktdaten:
Re: befehle an eine Konsole
Ich fürchte, ja. Vielleicht weiß aber jemand noch eine andere Lösung.Bauer321 hat geschrieben: das mit dem thread werde och mir gleich mal ansehen
brauch ich dafür dann multithreading?
Mit besten Grüßen,
Cybermonkey
Cybermonkey