Seite 1 von 1

pause in einer eingabeaufforderung

Verfasst: 25.08.2006 09:28
von jpd
Hallo,

ich versuche über dieses beispiel der output einer cmd shell in ein

editorgadget darzustellen.
Bei einfache befehle wie dir oder set oder externe tools das ein output zurueckgeben ist ok.

wenn aber diese anwendung mehr als eine seite zeigen möchte dann wartet dieser auf "druecken einer taste" um die nächste seite zu zeigen.



um das nachzustellen könnt Ihr direkt pause in stringgadget eingeben.

habt Ihr vielleicht eine Idee wie man das lösen kann?

Danke!

jpd



Code: Alles auswählen

Enumeration 
  #Window_Main 
  #Gadget_String 
  #Gadget_Editor 
EndEnumeration 
Global NewList leggistring.s()

Declare.s run_prog(run_cmd.l)
Procedure.l run_commander(prog.s)
  run_cmd = RunProgram("cmd.exe", "/c "+prog, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write  |#PB_Program_Error)
  ProcedureReturn run_cmd
EndProcedure 

Procedure open_win()
  WindowWidth = 640 
  WindowHeight = 480 
  WindowTitle.s = "CMD on a box" 
  If OpenWindow(#Window_Main, 0, 0, WindowWidth, WindowHeight, WindowTitle, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
    AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape) 
    AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Return, #PB_Shortcut_Return) 
    If CreateGadgetList(WindowID(#Window_Main)) 
      StringGadget(#Gadget_String, 10, 10, WindowWidth - 20, 20, "") 
      EditorGadget(#Gadget_Editor, 10, 40, WindowWidth - 20, WindowHeight - 50) 
    EndIf 
    Quit = #False 
         
  EndIf 
EndProcedure

Procedure.s run_prog(app.l)

If app
    While ProgramRunning(app) 
    
      test.s= ReadProgramString(app) 
      Debug test
      AddElement(leggistring())
      leggistring()= test
      ;Ergebnis = WaitProgram(app , 5000)
      ;Debug "Timeout: "+Str(Ergebnis)
    Wend
  EndIf
 
ProcedureReturn      
EndProcedure


open_win()
Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      Quit = #True 
    Case #PB_Event_Menu 
      Select EventMenu() 
        Case #PB_Shortcut_Escape 
          Quit = #True 
        Case #PB_Shortcut_Return 
          run_id=run_commander(GetGadgetText(#Gadget_String))
          run_prog(run_id)
          
          ResetList(leggistring.s())
          While NextElement(leggistring.s())
          Debug leggistring()
            AddGadgetItem(#Gadget_Editor,-1, leggistring.s())  
          Wend
          ClearList(leggistring.s()) 
          
      EndSelect 
  EndSelect 
Until Quit 

Verfasst: 25.08.2006 10:03
von MVXA
WriteProgramData()

Syntax

Ergebnis = WriteProgramData(Programm, *Buffer, Groesse)
Beschreibung

Schreibt die Daten aus dem Buffer in die Eingabe des angegebenen Programms (stdin). Das Programm muss mit RunProgram() und dem #PB_Program_Write Flag gestartet worden sein.

Ein spezieller Wert #PB_Program_Eof kann für den '*Buffer' Parameter verwendet werden, damit das Programm ein EOF ("Ende der Datei") in seiner Eingabe empfängt. (Damit wird diesem mitgeteilt, dass keine weiteren Eingaben folgen.) Der Parameter 'Groesse' wird in diesem Fall ignoriert. Nach dem Aufruf von WriteProgramData() mit diesem speziellen Wert, können keine weiteren Eingaben an das Programm geschrieben werden.
Rückgabewert

Gibt die Anzahl an gerade geschriebenen Bytes zurück.
Unterstützte OS

Alle
Könnte vielleicht helfen. Shee aber gerade ein Fehler bei "Unterstütze OS"

Verfasst: 25.08.2006 12:21
von jpd
Hallo MVXA,

danke erstmal das du dir die sache angeguckt hast!

wie kann ich diesen ..#PB_Program_Eof wert verwenden wenn ich keine datei lese oder schreibe ?


meinst'du villeicht das gesammte output in einer datei zu "pipen" ?

jpd