![]() |
AW: GUI-Anwendung mit Konsolenausgabe
(1) Unter Delphi7 funktioniert die Anweisung "if AttachConsole(ATTACH_PARENT_PROCESS) then" nicht bzw. gibt immer den Wert FALSE zurück.
Die Verwendung von "if Windows.AllocConsole then" funktioniert dagegen schon. (2) Man kann mit
Code:
einen künstlichen Prompt anzeigen, die Eingabe in die Variable abfangen und diese zielgerichtet auswerten.
Write('>');
ReadLn(Parameter); (3) Sollte man unbedingt entweder mit einem Mutex oder per GlobalFindAtom() arbeiten, um den sonst möglichen Start mehrfacher Instanzen des Programms zu blockieren und so insbesondere das Kuddelmuddel einer evt. gleichzeitigen Präsenz von GUI- und Konsolen-Ausgabe separater Instanzen des Programms zu verhindern (4) Deshalb Vorschlag:
Code:
Eine grundsätzliche Frage ist aber, wozu denn überhaupt der Klimmzug mit der Konsolenausgabe sinnvoll sein soll, wenn man die gleiche Information problemlos und diese viel besser und ansprechender noch vor der Initialisierung der Mainform mittels Showmessage() anzeigen kann, ohne ggf. zwangsläufig dann die Mainform öffnen zu müssen.
program GUIcons;
uses windows, Sysutils, Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} const AppTitle = 'GUIcons'; // irgendetwas Spezifisches als Titel var Mutex: THandle; ConsoleForm: TForm1; Parameter: shortstring; begin Mutex := CreateMutex(nil, True, AppTitle); if (Mutex = 0) or (GetLastError = ERROR_ALREADY_EXISTS) then begin // Reaktiviere die bereits laufende 1.Programminstanz SendMessage(HWND_BROADCAST, RegisterWindowMessage(AppTitle), 0, 0); // und beende sofort die neu gestartete (2.) Programminstanz end else try Parameter:=''; // gff. eine spezifische Parameteranalyse if paramcount = 0 then begin if Windows.AllocConsole then try ConsoleForm := TForm1.Create(nil); WriteLn; // irgendeine sinnvolle Information, z.B.: WriteLn('Usage: GUIcons <Parameter>'); WriteLn('Fortsetzung mit <ENTER>'); write('> '); readln(Parameter); finally ConsoleForm.Free; FreeConsole; end; end else parameter:=paramstr(1); // ggf. prüfen, ob doch noch benötigter Parameter eingegeben wurde, // z.B. Parameter "/open" if Uppercase(Parameter)='/OPEN' then begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end finally CloseHandle(Mutex); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz