Lieber Besucher, herzlich willkommen bei: Delphi-Treff-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

col-serra

Benutzer

  • »col-serra« ist der Autor dieses Themas

Beiträge: 12

Registrierungsdatum: 30. Dezember 2007

  • Private Nachricht senden

1

Montag, 25. Februar 2008, 15:19

Console in echtzei auslesen ?

Hi ,wolte fragen ob jemand eine funktion weiss
die eine console in echtzeit auslesen kann.

Bin am schreiben eines gui's zum komprimieren von dateien ,
nun moechte ich eine statusanzeige realisieren ,
da ich keine *.hlp files oeffnen kann (weiss der teufel warum),
kann ich da auch nicht suchen ich habe folgende routine im visier : "ReadConsoleOutputCharacter" .

Bin ich da richtig ? Wenn ja wie wende ich sie an ?
Bei google lauf ich amok alles in c,c++ :cry:

Danke
MFG Col-serra

---------------------------------------------------------
Wer fehler findet kann sie behalten.

aeo

Benutzer

Beiträge: 114

Registrierungsdatum: 29. Januar 2008

  • Private Nachricht senden

2

Montag, 25. Februar 2008, 15:28

wär vähler Vinted dahf Si bähaltän.

col-serra

Benutzer

  • »col-serra« ist der Autor dieses Themas

Beiträge: 12

Registrierungsdatum: 30. Dezember 2007

  • Private Nachricht senden

3

Montag, 25. Februar 2008, 16:01

Diese funktion zeigt die ausgabe erst nach beenden der console an .:cry:

Ich meinte echtzeit so dass ich eine bestimmte zeile abfangen kann ,
in meinem fall die 6te ab 11ter stelle , um diese auf einer progressbar anzeigen zu koennen , waerend dem er komprimiert also gleichzeitig .:-/
MFG Col-serra

---------------------------------------------------------
Wer fehler findet kann sie behalten.

aeo

Benutzer

Beiträge: 114

Registrierungsdatum: 29. Januar 2008

  • Private Nachricht senden

4

Montag, 25. Februar 2008, 16:39

Du kannst doch auch einfach ein Memo nehmen und dort drinn die Sachen ziegen, warum den Umweg über eine Konsole?
wär vähler Vinted dahf Si bähaltän.

cware

Delphi-Experte

Beiträge: 1 365

Registrierungsdatum: 25. Februar 2007

IDE: weiß nicht

Danksagungen: 1 / 0

  • Private Nachricht senden

5

Montag, 25. Februar 2008, 16:42

wahrscheinlich, weil das kompressions-programm nicht von ihm ist...

und um ein bissel zur lösung beizutragen...
guck dir mal WaitForSingleObject(ProcessInfo.hProcess, INFINITE); an...
das ding blockiert, bis der entsprechende Prozess fertig ist...


cheers...

R2C2

Moderator

Beiträge: 9 925

Registrierungsdatum: 18. März 2005

Beruf: Softwareentwickler

IDE: Lazarus

Danksagungen: 26 / 17

  • Private Nachricht senden

6

Montag, 25. Februar 2008, 17:46

Mit folgenden Änderungen könnte[1] es gehen:
-

Delphi-Quellcode

1
function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
==> Ändern von TStringList auf TStrings
- Stream rauswerfen
- statt der Zeile

Delphi-Quellcode

1
Stream.Write(Buffer, NumberOfBytesRead);
folgendes:

Delphi-Quellcode

1
Output.Add(String(PChar(@Buffer)));

- Bei Aufruf dann einfach Memo.Lines als Paranmeter angeben

[1] Bin nicht so der Spezialist uin Sachen Systeminterna...

mfg

Christian


Kaum macht man's richtig, schon klappts!

col-serra

Benutzer

  • »col-serra« ist der Autor dieses Themas

Beiträge: 12

Registrierungsdatum: 30. Dezember 2007

  • Private Nachricht senden

7

Montag, 25. Februar 2008, 19:58

Davon abgesehen dass function "GetConsoleOutput"
immer sagt bei folgendem aufruf "comprimierer.exe 9 imput.datei output.datei" C'ant open file,
warum weiss ich net alles beachtet , geht nur bis zum input ,

leuft nach der aenderung garnichts :oops:

bei dieser app (UPX SHELL)http://sourceforge.net/project/showfiles…lease_id=343566

Bin mier nicht sicher aber ich glaub es kommt die "ReadConsoleOutputCharacter" Routine zum einsatz ,da ich selbst nicht ueber genuegend api kenntnisse verfuege und ,durch den ganzen code teile verteilt sind um den progress status anzuzeigen, kann ich mier da auch nicht helfen :(

Leider gehen bei mier die *.hlp files nicht mehr um dies zu erforschen ....

Edit : Die funktionen zum anzeigen des progess status liegen in der "Compression.pas" ,
wenn man die (da open source) posten darf mach ich's

Danke aber trozdem .
MFG Col-serra

---------------------------------------------------------
Wer fehler findet kann sie behalten.

R2C2

Moderator

Beiträge: 9 925

Registrierungsdatum: 18. März 2005

Beruf: Softwareentwickler

IDE: Lazarus

Danksagungen: 26 / 17

  • Private Nachricht senden

8

Montag, 25. Februar 2008, 20:10

Zitat von »col-serra;165591«

Davon abgesehen dass function "GetConsoleOutput"
immer sagt bei folgendem aufruf "comprimierer.exe 9 imput.datei output.datei" C'ant open file,
warum weiss ich net alles beachtet , geht nur bis zum input ,

leuft nach der aenderung garnichts :oops:

Bitte nochmal so, dass auch ichs versteh. Ich kann höchastens raten...

Zitat


Was hat das mit deinem problem zu tun? versteh ich nicht...

Zitat


Bin mier nicht sicher aber ich glaub es kommt die "ReadConsoleOutputCharacter" Routine zum einsatz ,da ich selbst nicht ueber genuegend api kenntnisse verfuege und ,durch den ganzen code teile verteilt sind um den progress status anzuzeigen, kann ich mier da auch nicht helfen :(

http://msdn2.microsoft.com/en-us/library/ms684969.aspx
Zu faul mich da jetzt reinzulesen...

Zitat


Leider gehen bei mier die *.hlp files nicht mehr um dies zu erforschen ....

Ab Vista is dasentsprechende Programm nicht mehr dabei. Gibts aber bei Microsoft zum Download. Wie das bei Win Server 2003 aussieht, weiß ich nicht...

mfg

Christian


Kaum macht man's richtig, schon klappts!

col-serra

Benutzer

  • »col-serra« ist der Autor dieses Themas

Beiträge: 12

Registrierungsdatum: 30. Dezember 2007

  • Private Nachricht senden

9

Montag, 25. Februar 2008, 21:14

Achso sorry , naja als excecute habe ich dies angegeben :
"comprimierer.exe 9 imput.datei output.datei"
als result bekomme ich dann "Can't open the file".

Ueber start-> aussfueren gehts aber ,d.h. der befehl is in ordnung ,nur die funktion komm nicht mit langen saetzen klar (scheint es jedenfalls).

Aber gebe ich nur "comprimierer.exe 9 imput.datei"
an krieg ich das result von der app., jedoch nach beenden der app !

-----------------------------------------

Jetzt hatte ich die von dier angegebenen aenderungen gemacht, bekomme ich kein result :cry:

Zitat

Zitat

Was hat das mit deinem problem zu tun? versteh ich nicht...
In dieser source wird die moeglichkeit angewand die ich suche.
Jedoch find ich mich nicht zurecht da ich nicht genuegend api kaentisse habe.

Zitat

http://msdn2.microsoft.com/en-us/library/ms684969.aspx
Zu faul mich da jetzt reinzulesen...
Gibts diese seite auch auf deutsch.

Mein english ist begrenzt :cry:

Soweit ich verstanden habe liest diese funktion zellen auss ab besimmter position ?

Zitat

Ab Vista is dasentsprechende Programm nicht mehr dabei. Gibts aber bei Microsoft zum Download. Wie das bei Win Server 2003 aussieht, weiß ich nicht...
Beim 2003 server ist es mit dabei es handelt sich um die winhlp32.exe ,leider starte diese nicht, bei google hab ich dann bemerkt dass ich der einziege mit diesem problem bin .

Danke
MFG Col-serra

---------------------------------------------------------
Wer fehler findet kann sie behalten.

aeo

Benutzer

Beiträge: 114

Registrierungsdatum: 29. Januar 2008

  • Private Nachricht senden

10

Montag, 25. Februar 2008, 21:19

Also ich will ja jetzt nichts sagen, tu es aber trotzdem: müsste es nicht eher "input" statt "imput" heißen, bzw. solltest du deine Variable umbenennen.


aeo
wär vähler Vinted dahf Si bähaltän.

R2C2

Moderator

Beiträge: 9 925

Registrierungsdatum: 18. März 2005

Beruf: Softwareentwickler

IDE: Lazarus

Danksagungen: 26 / 17

  • Private Nachricht senden

11

Montag, 25. Februar 2008, 21:46

Zitat von »col-serra;165599«

Achso sorry , naja als excecute habe ich dies angegeben :
"comprimierer.exe 9 imput.datei output.datei"
als result bekomme ich dann "Can't open the file".

Ueber start-> aussfueren gehts aber ,d.h. der befehl is in ordnung ,nur die funktion komm nicht mit langen saetzen klar (scheint es jedenfalls).

Aber gebe ich nur "comprimierer.exe 9 imput.datei"
an krieg ich das result von der app., jedoch nach beenden der app !

Das liegt wohl am Arbeitsverzeichnis. Gib jeweils die absoluten Pfade(relative Pfade sollte man eh meiden wie die Pest, sofern man nicht einen triftigen Grund dazu hat) an und es sollte funktionieren...

Zitat


Jetzt hatte ich die von dier angegebenen aenderungen gemacht, bekomme ich kein result :cry:

Dann werf mal den Debugger an und guck, wo drans liegt...

Zitat


Gibts diese seite auch auf deutsch.

Mein english ist begrenzt :cry:

Nö, gibts nur auf Englisch.

Zitat


Soweit ich verstanden habe liest diese funktion zellen auss ab besimmter position ?

jo.

mfg

Christian


Kaum macht man's richtig, schon klappts!

col-serra

Benutzer

  • »col-serra« ist der Autor dieses Themas

Beiträge: 12

Registrierungsdatum: 30. Dezember 2007

  • Private Nachricht senden

12

Montag, 25. Februar 2008, 22:03

? was hat das denn damit zu thun koennte ja auch statt input.datei filename.datei sein ?!
MFG Col-serra

---------------------------------------------------------
Wer fehler findet kann sie behalten.

R2C2

Moderator

Beiträge: 9 925

Registrierungsdatum: 18. März 2005

Beruf: Softwareentwickler

IDE: Lazarus

Danksagungen: 26 / 17

  • Private Nachricht senden

13

Montag, 25. Februar 2008, 22:04

Das war nur ein Hinweis auf einen der zahlreichen Rechtschreibfehler in deinen Posts...

mfg

Christian


Kaum macht man's richtig, schon klappts!

pfarrer

Benutzer

Beiträge: 10

Registrierungsdatum: 4. März 2008

  • Private Nachricht senden

14

Dienstag, 4. März 2008, 18:44

Console in Echtzeit auslesen

Hallo, ich bin auf der Suche nach der Lösung eines ähnlichen Problems. Ich möchte einen GNU-Compiler von Delphi aus starten, und die Ausgaben des Compilers in ein Memo umleiten. Ich habe einige gute Programme gefunden u.A.:
hier: http://www.delphi3000.com/articles/article_3361.asp?SK=
hier: http://www.martinstoeckli.ch/delphi/delphi.html
und hier: http://www.swissdelphicenter.ch/torry/showcode.php?id=990
Das letzte benutze ich. Es verwendet input und output pipes, so wie es wohl auch richtig ist. Es funktioniert auch gut bei DOS-Befehlen. Aber den gcc-Compiler ruft es entweder nicht auf, oder die Ausgabe wird einfach nicht auf mein Memo umgeleitet.
Ich weiß von pipes nur so viel, das es eigentlich "Rohre" heißt, womit auch meine Windows-Api Kenntnisse beschrieben sind.
Kann mir jemand einen Rat geben was ich falsch mache?

RunCaptured(path, 'cmd.exe /K arm-elf-gcc.exe','');

in dem Memo erscheint dann lediglich der Pfad.
Der Aufruf des gcc ohne Parameter müsste "no input files" als Ausgabe anzeigen. So erscheint er in der Consolenanwendung. Ich denke ... schon zu viel gedacht.
Tatsächlich fällt mir nix mehr ein als - need help.

mfg rudi

R2C2

Moderator

Beiträge: 9 925

Registrierungsdatum: 18. März 2005

Beruf: Softwareentwickler

IDE: Lazarus

Danksagungen: 26 / 17

  • Private Nachricht senden

15

Dienstag, 4. März 2008, 18:49

Bitte mach einen eigenen Thread auf. Danke.

mfg

Christian

P.S.: Fett schreiben ist nicht nötig. Wir können das auch so lesen... ;-)


Kaum macht man's richtig, schon klappts!

pfarrer

Benutzer

Beiträge: 10

Registrierungsdatum: 4. März 2008

  • Private Nachricht senden

16

Dienstag, 4. März 2008, 18:57

Console in Echtzeit auslesen

Das ist mir auch unangenehm aufgefallen, aber das war mein allererster Beitrag, und den Text habe ich aus dem Clipboard kopiert. War nicht aufdringlich gemeint.
Aber ich bin lernfähig, wie du siehst.

gruß rudi

pfarrer

Benutzer

Beiträge: 10

Registrierungsdatum: 4. März 2008

  • Private Nachricht senden

17

Dienstag, 4. März 2008, 19:03

Ich weiß nicht wie ich einen eigenen thread aufmachen kann, ich dachte auch das gehört zum thema. Ich wollte eigentlich gar keinen, nur kleinlaut fragen. Aber gleich das Fettnäpfchen erwischt. Kann man das Fette nicht wegmachen? Sieht wirklich blöd aus. Ich bitte noch um ein wenig Nachsicht.

guinnes

Moderator

Beiträge: 10 938

Registrierungsdatum: 28. Juli 2001

Beruf: Delphi-Programmierer

IDE: Delphi 5

Danksagungen: 30 / 8

  • Private Nachricht senden

18

Dienstag, 4. März 2008, 19:03

Zitat von »pfarrer;166093«

War nicht aufdringlich gemeint.

Dann änder ich das mal ( wenn ich kann )
Glückauf

Herr, wirf Hirn vom Himmel

Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )

pfarrer

Benutzer

Beiträge: 10

Registrierungsdatum: 4. März 2008

  • Private Nachricht senden

19

Dienstag, 4. März 2008, 19:07

Danke

guinnes

Moderator

Beiträge: 10 938

Registrierungsdatum: 28. Juli 2001

Beruf: Delphi-Programmierer

IDE: Delphi 5

Danksagungen: 30 / 8

  • Private Nachricht senden

20

Dienstag, 4. März 2008, 19:13

Zitat von »pfarrer;166094«

Ich weiß nicht wie ich einen eigenen thread aufmachen kann, ich dachte auch das gehört zum thema.
Forum auswählen, neues Thema anklicken und gut ist :)
Glückauf

Herr, wirf Hirn vom Himmel

Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )