Console-Inhalt lesen und speichern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Console-Inhalt lesen und speichern

Beitrag von RSBasic »

Hallo Leute, ich hoffe es geht euch gut, denn ich habe wieder eine simple Frage für euch.
Ich programmiere gerade sone Console und möchte den Inhalt, was da mit Print[N]() wiedergegeben wurde, lesen und in einer Datei abspeichern.
Mein Problem ist aber, dass ich nicht umsetzen kann und außerdem habe ich in der PB-Hilfe, CAV, Google und im PB-Board nachgeschaut, aber leider nix gefunden.
Bitte helft mir, thx.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Hi RSBasic,

ich würde es anders machen:
Bevor Du PrintN machst, immer erst alles schön in eine LinkedList speichern, dann PrintN und anschließend kannst Du diese auch über einen Loop in eine Datei speichern.

Das geht viel schneller als aus der Console zu lesen und ist auch relativ einfach.
PB 5.72
ahab
Beiträge: 9
Registriert: 04.11.2008 22:39

Re: Console-Inhalt lesen und speichern

Beitrag von ahab »

Hi,

dieses Thema ist zwar ein wenig alt, hab aber nichts anderes passendes gefunden. Ich möchte ebenfalls bereits in der Console ausgegebenen Text lesen. Das habe ich mir in etwa so vorgestellt:

Code: Alles auswählen

Procedure.s __GetConsoleCharacter( x.l, y.l, length.l = 1 )
    If length > 0
        ret$ = Space( length )
        readCoord.COORD
            readCoord\x = x
            readCoord\y = y
        numberOfCharsRead.l
        
        If ReadConsoleOutputCharacter_( GetStdHandle_( #STD_OUTPUT_HANDLE ), @ret$, length, readCoord, @numberOfCharsRead )
            Debug numberOfCharsRead
            ProcedureReturn ret$
        EndIf
    EndIf
    
    ProcedureReturn #NULL$
EndProcedure

OpenConsole()
    EnableGraphicalConsole( #True )
    For i = 0 To 20
        ConsoleLocate( 0, i ) : Print( "BlaBliBlub1234567890abcdefghijklmnopqrstuvwxyz" )
    Next i 
       
    Debug __GetConsoleCharacter( 0, 10, 5 )
    Debug GetLastError_()     ;<- ERROR_ACCESS_DENIED (0x5)    !!!!!!!!!!!!!!!!
    Input()
CloseConsole()
End
Leider bekomme ich aber anscheinend keinen Zugriff auf den Console Screen Buffer? Nach meiner Recherche in der MSDN fehlt mir wohl das "GENERIC_READ access right". Oder mache ich etwas anderes falsch und baue ich hier einfach totalen Mist? OS ist übrigens WinXP.
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: Console-Inhalt lesen und speichern

Beitrag von hörmi »

Vielleicht hilft das ein bisschen weiter?
ist allerdings auch nicht das gelbe vom ei

Code: Alles auswählen

Buffer.s=Space(10000)
OpenConsole()
    size=ReadConsoleData(@Buffer,10000)
    PrintN("Du hast folgendes geschrieben:")
    PrintN(Left(Buffer,size))
    Input()
CloseConsole()
End
BildBild Bild
ahab
Beiträge: 9
Registriert: 04.11.2008 22:39

Re: Console-Inhalt lesen und speichern

Beitrag von ahab »

Das hilft mir auch nicht wirklich weiter. ReadConsoleData() liest ja nur etwas aus dem Input-Buffer, so wie z.B. PeekConsoleInput (http://msdn.microsoft.com/en-us/library ... 85%29.aspx). Ich möchte ja etwas auslesen, was bereits ausgegeben wurde. In einer anderen Funktion möchte ich Eigenschaften wie Text- und Hintergrundfarbe an einer bestimmten Position der Console ermitteln. Aber bei ReadConsoleOutputAttribute_() bekomme ich ebenfalls den Fehler 5.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Console-Inhalt lesen und speichern

Beitrag von Josh »

bin gerade über was gestolpert, vieleicht hilft es dir weiter. schau mal hier auf seite 250.
Ein Vorteil von CScript ist, dass es mit der Methode WScript.StdIn.ReadLine() das Einlesen von Eingaben des Benutzer im DOS-Fenster unterstützt. Ausgaben können mit dem DOS-Befehl für Umleitungen (>) in eine Textdatei oder an einen Drucker umgeleitet werden.
Antworten