Seite 1 von 2
kleines problem
Verfasst: 05.03.2006 21:32
von Ninja_
Code: Alles auswählen
console = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
While AvailableProgramOutput(console)
Debug ReadProgramString(console)
Wend
Debug "running"
Delay(500)
ForEver
wieso wird das programm nach kurzer ausgabe angehalten bis die cmd.exe von hand beendet wurde und läuft erst dann wieder weiter? Und wie vermeide ich das?
mfg Ninja
Verfasst: 06.03.2006 17:09
von Ninja_
Kann mir niemand helfen?
Verfasst: 06.03.2006 17:24
von hardfalcon
Schau mal bei While-Wend nach...
In deinem Programm sind 2 Schleifen, einmal Repeat-ForEver und dann noch While-Wend. Diese 2. Schleife, While-Wend, ist es, in der das Programm so lange bleibt, bis es aus dem Konsolenfenster nix mehr lesen kann (sprich bis das Konsolenfenster vom Benutzer manuell geschlossen wurde)....

Verfasst: 06.03.2006 17:31
von Ninja_
ich habs jetz so modifieziert:
Code: Alles auswählen
console = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
If AvailableProgramOutput(console)
Debug ReadProgramString(console)
EndIf
Debug "running"
Delay(500)
ForEver
Also ohne wend / while schleife und trozdem hängts.
Verfasst: 06.03.2006 17:52
von SoS
ohne #PB_Program_Write funktionierts auch wenn die Console gleich geschlossen wird.
Kann es damit zusammenhängen das die Console auf "input" wartet ?
Verfasst: 06.03.2006 17:56
von hardfalcon
Code: Alles auswählen
console.l = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
length.l = AvailableProgramOutput(console)
If length.l
Debug Str(length.l)+"characters of program output left..."
Debug ReadProgramString(console)
EndIf
Debug "running"
Delay(500)
ForEver
Dass das Teil am Ende bei 73 Zeichen hängenbleibt (die ich übrigens weder mit ReadProgramError() noch mit ReadProgramData() auslesen konnte), macht mich schon stutzig... Da weiss ich auch nicht weiter...

Verfasst: 06.03.2006 17:56
von Ninja_
ich habe aber vor später was in die konsole zu schreibe deshalb das write!
ich habe mittlerweile eine lösung gefunden indem ich einen thread erstelle der immer schaut ob was zum auslesen da is, und wenn nicht hängt eben blos der thread, leider ist das auf diese weise aber nicht in meinem projekt umzusetzen! Es muss doch irgendeine lösung geben

Verfasst: 06.03.2006 18:12
von SoS
hardfalcon hat geschrieben:Code: Alles auswählen
console.l = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
length.l = AvailableProgramOutput(console)
If length.l
Debug Str(length.l)+"characters of program output left..."
Debug ReadProgramString(console)
EndIf
Debug "running"
Delay(500)
ForEver
Dass das Teil am Ende bei 73 Zeichen hängenbleibt (die ich übrigens weder mit ReadProgramError() noch mit ReadProgramData() auslesen konnte), macht mich schon stutzig... Da weiss ich auch nicht weiter...

sehr merkwürdig
Debugger hat geschrieben:
running
127characters of program output left...
Microsoft Windows XP [Version 5.1.2600]
running
86characters of program output left...
(C) Copyright 1985-2001 Microsoft Corp.
running
45characters of program output left...
running
43characters of program output left...
und dann ist bei mir schluss...
Verfasst: 06.03.2006 18:17
von hardfalcon
Ich glaub, ich hab die Ursache des Problems (aber leider keine Lösung dazu):
cmd.exe ist ja die Kommandozeile von Windows. Jetzt haben wir das Problem, dass cmd sowohl gestartet werden kann als auch selbst ein weiteres Programm starten kann. Starte "cmd.exe", und gib mal "cmd" ein.
Schau oben in die Titelleiste vom Konsolenfenster. Tipp nochmal "cmd" ein. Schau dir die Titelzeile nochmal an. Das ist wie ein Stapel Blätter: sobald du im letzten "Blatt" "cmd" eingegeben hast, kommt ein neues Blatt obendraufgefallen. Das ganze ist ein Fass ohne Boden... Mit irgendeinem anderen, normalen Programm sollte es gehen... Nur mit "cmd.exe" gehts halt nicht, das is ein Sonderfall...
Verfasst: 06.03.2006 18:20
von Ninja_
Toll ich brauch aber genau die cmd.exe

ich hab schon programme gesehen die die cmd.exe getunnelt haben!