[DELPHI] Output werkt niet

Pagina: 1
Acties:

  • equinoxe
  • Registratie: Februari 2001
  • Laatst online: 07-05-2024
Jaq, ik heb gegoogled en gesearched, maar toch kan ik het niet vinden..
Ik zit met het volgende probleem

Oderstaand code is een snipped uit een shell die command-line programma aanstuurt en het resultaat in de shell laat zien.
Ik heb meerdere velden die ingevuld moeten worden, echter wil het nog eens zijn dat Edit3.text blank is.
Als dat het geval is start het programma (programma4.exe) wel op maar dan verwacht ie nog een {Enter} te krijgen..als ie dat niet krijgt hangt de shell vast, en blijft programma4 ook hangen..
En dat is nou mijn probleem, ik weet bij god niet hoe ik die extra Enter moet invoeren..

Wie kan mij hiermee helpen (en ja, ik weet dat ik een enorme n00b :P ben (dit is nl. mijn eerste programma in Delphi))..


code:
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
procedure TConsoleForm.Button4Click(Sender: TObject);
var
  s: String;
  p: String;
  CAExitCode: Integer;
  begin
  p:= Edit3.text;
if p = '' then
begin
  s:= 'programma4.exe';
  Output.Items.Clear;
  Output.Items.Add('Started: ' + s);
  CAExitCode:= ExecConsoleApp(s, Edit1.Text + ' /user ' + Edit2.Text ' ' + Edit4.Text, Output.Items, RunningUpdate);
// geef een ENTER als output.. (als ie al hier hoort..)
Output.Items.Add(Format('%s returned %d', [s, CAExitCode]))
     end
else
begin
  s:= 'programma4.exe';
  Output.Items.Clear;
  Output.Items.Add('Started: ' + s);
  CAExitCode:= ExecConsoleApp(s, Edit1.Text + ' /user ' + Edit2.Text + ' /passwd ' + Edit3.Text + ' ' + Edit4.Text, Output.Items, RunningUpdate);
  Output.Items.Add(Format('%s returned %d', [s, CAExitCode]))
end
end;

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

+ #13#10?
Ik begrijp je probeelm niet helemaal nog denk ik...

We adore chaos because we like to restore order - M.C. Escher


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Ik begrijp je probleem ook niet echt.

If you are not wiping out you are nog pushing enough...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09:55

Creepy

Tactical Espionage Splatterer

* Creepy gokt dat het programma dat wordt gerunt op de stdin een enter verwacht (als in, start het programma op de dosprompt en je moet dan nog een keer op enter drukken om het programma door te laten gaan.

Als je de standard in filestream kan omleiden naar je programma dan kan je vast wel een enter sturen, maar dan zal je e.e.a. moeten aanpassen in de ExecConsoleApp functie. Het afvangen van de input/output is nou niet echt triviaal, dus ik kan je aanraden daar niet aan te beginnen als dit je eerste Delphi prog is

Als je het window handle (HWND) kan opvragen waarin de console .app draait is het misschien mogelijk om m.b.v. sendmessage een druk op enter te simuleren. Maar ook dit is weer afhankelijk van de impementatie van execonsoleapp.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Ik zie 3 mogelijkheden
1: Je schuift van te voren een [enter] in de keyboard buffer (Dit was iets dat in Dos-dagen nog wel eens werkte)
2: Je stuurt een wm_char message naar de command-environment waarin programma4.exe werkt
3: Probeer eens een lege string aan de /passwd parameter mee te geven door aaneensluitende aanhalingstekens te plaatsen ("" of '' , door binnen een string 2 enkele aanhalingstekens achter elkaar te plaatsen krijg je één aanhalingsteken in de string, in onderstaand voorbeeld staan dus 4 enkele aanhalingstekens achter elkaar na /passwd , maar misschien dat de parameter parser van programma4.exe wel dubbele aanhalingstekens pakt)

CAExitCode:= ExecConsoleApp(s, Edit1.Text + ' /user ' + Edit2.Text + ' /passwd '''' '' + Edit4.Text, Output.Items, RunningUpdate);

  • equinoxe
  • Registratie: Februari 2001
  • Laatst online: 07-05-2024
creepy heeft goed gegokt,
met CAExitcode start ik dat programma op, hij verwacht idd nog een enter om door te kunnen gaan.

echter heb ik van Delphi te weinig verstand om die HWND of wm_char message toe te passen..


Ik heb '''' '' en + #13#10 geprobeerd, maar dit werkt helaas niet..

  • equinoxe
  • Registratie: Februari 2001
  • Laatst online: 07-05-2024
Heeft iemand ervaring met het bouwen van shells voor dos-programma's en met name ervaring met dit type probleem?

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

ik heb het wel eens gedaan maar dat was heel erg lang geleden, ik heb dus echt geeeeen idee meer wat voor problemen ik tegen ben gekomen (lees delphi 2.0 tijdperk ofzo)

If you are not wiping out you are nog pushing enough...


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan de hele input en output van een console redirecten naar je app. Werkt niet als het programma directe input/output gebruikt.

http://efd.home.mindspring.com/hyperstr.htm heeft daar functies voor
of zoek even op 'console redirect ^delphi' op www.tamaracka.com. Gaat mbv CreateProcess en pipes...

We adore chaos because we like to restore order - M.C. Escher


  • Dala
  • Registratie: November 2000
  • Laatst online: 26-08 11:20
code:
1
2
3
CAExitCode:= ExecConsoleApp(s, Edit1.Text + ' /user ' + Edit2.Text + ' /passwd ' + Edit3.Text + ' ' + Edit4.Text+'

', Output.Items, RunningUpdate);


als je nou gewoon een enter erachter keilt? ik dacht dat dat wel werkte?

als je naar een command promt iets plakt met een enter erbij doet hij dat ook automtisch.

  • equinoxe
  • Registratie: Februari 2001
  • Laatst online: 07-05-2024
Dat is idd te proberen, dus heb ik + #13#10 erbij gegooid, maar dat werkt niet..

  • Dala
  • Registratie: November 2000
  • Laatst online: 26-08 11:20
equinoxe schreef op 07 November 2002 @ 21:42:
Dat is idd te proberen, dus heb ik + #13#10 erbij gegooid, maar dat werkt niet..
offtopic:
ps, je cd is klaar ;)


daar is wel wa verschil tussen dacht ik.
Pagina: 1