Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Woher kommt die Diskrepanz? (https://www.delphipraxis.net/214745-woher-kommt-die-diskrepanz.html)

TurboMagic 2. Mär 2024 14:37

Woher kommt die Diskrepanz?
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

ruft man SDKManager.bat --list per Kommandozeile von dem ordner auf aus, in dem diee
Batch-Datei liegt, so bekommt man die in SDKManager.png gezeigte Ausgabe.

Ich habe versucht diese Ausgabe mittels DOSCommand Komponente (zu finden in GetIt)
abzugreifen. Nur wenn ich das tue bekomme ich das in SDKManagerFMX.png gezeigte,
was doch erheblich davon abweicht.

Woher kommt die Abweichung?
Wie kann ich zur ungefähr selben Ausgabe kommen, damit ich diese Daten verarbeiten kann?

Leite ich die Ausgabe der Kommandozeile wie folgt um: SDKManager.bat --list > test.txt
sieht es aus wie in SDKManager.png

Mein Testprogramm ist in der angehängten ZIP-Datei.

Grüße
TurboMagic

himitsu 2. Mär 2024 15:45

AW: Woher kommt die Diskrepanz?
 
Viele Programme reagieren unterschiedlich, jenachdem, ob sie mit einer Console oder mit einem umgeleiteten Stream/Pipe reden.
Bei der Console kann z.B. die größe des Fensters abgefragt werden, außerdem lässt sich der Cursor steuern.
Leider tut dieses Programm das nicht und schickt auch an den Stream die selben Befehle.

Willst du wirklich vergleichbare Ergebnisse, dann mußt du selbst eine "Console" bereitstellen, auf dem alten DOS-Weg (deprecaded) oder mit dem neueren, wieder linuxartigem Wege.
Ja, ursprünglich arbeitete auch DOS/Windows auch mal mit einem Stream, falls noch jemand die alten EscapeCodes kennt, um den Cursor und die Farben zu steuern und dann lief es über eine Console-API (welche die CMD.EXE nutzt) und nun wieder zurück zum Stream (wie es das neue Terminal nutzt), um auch wieder mit Linux reden zu können.

MSDN-Library durchsuchenCreatePseudoConsole
https://learn.microsoft.com/de-de/wi...pseudoconsoles
https://learn.microsoft.com/de-de/wi...onsole-session

In der Console muß man dann auch die Befehle beachten, welche z.B. den Cursor wieder an den Zeilenanfang schieben und entsprechend die "alten" Chars überschreiben.

Uwe Raabe 2. Mär 2024 16:23

AW: Woher kommt die Diskrepanz?
 
Du solltest in DosCommandNewLine den Parameter AOutputType auswerten und nur bei otEntireLine den Wert übernehmen.

TurboMagic 2. Mär 2024 17:16

AW: Woher kommt die Diskrepanz?
 
Ja, so funktioniert das schon recht gut. Damit kann man wohl zurecht kommen. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz