![]() |
Konsole Fenster unsichtbar machen
Hi Delphianer
Ich versuche mich gerade etwas mit der Konsole. Nun würde ich gerne das Konsolefenster unsichtbar machen wenn ich mein Programm ausführe da das schwarze Fenster ja nicht unbedingt schön ist. Ich habe gelesen das man nur das
Delphi-Quellcode:
weglassen muss.
{$APPTYPE CONSOLE}
Leider funktioniert das bei mir nicht, weiss wer warum das so ist und an was es liegen kann? Bisher schaut mein Code so aus.
Delphi-Quellcode:
Grüsse Zodi
program meinprogi;
{$R *.res} //{$APPTYPE CONSOLE} uses messages, windows; var Msg: TMsg; begin NoErrMsg := True; SetErrorMode(SEM_FAILCRITICALERRORS + SEM_NOALIGNMENTFAULTEXCEPT + SEM_NOGPFAULTERRORBOX + SEM_NOOPENFILEERRORBOX); Randomize; while true do begin sleep(10); PeekMessage(Msg, 0, 0, 0, PM_REMOVE); TranslateMessage(Msg); DispatchMessage(Msg); end; end. |
AW: Konsole Fenster unsichtbar machen
Pack diese Anweisung
Delphi-Quellcode:
über Deine Schleife, sollte das machen was Du möchstest, eine Console App ohne Console :-]
ShowWindow(GetConsoleWindow(), SW_HIDE);
Wenn es doch noch mal sichtbar werden soll, genau, ShowWindow(GetConsoleWindow(), SW_SHOW); und fertig. //edit {$APPTYPE CONSOLE} <<-- drinnen lassen! //reedit zum erklären hat himitsu bestimmt viel zu sagen, da verlasse ich mich mal drauf *zwinker* (Ich vermute mal das ohne das {$APPTYPE CONSOLE} Windows eine Fenster Initialisierung erwartet, wie bei non-Vcl Anwendungen.) |
AW: Konsole Fenster unsichtbar machen
Hi CodeZwerg leider funktioniert das nicht ganz sauber.
Das Fenster blitzt schnell auf und dann ist es weg. Habe mitlerweile die Lösung gefunden und das
Delphi-Quellcode:
durch
{$APPTYPE CONSOLE}
Delphi-Quellcode:
ersetzt nun funktioniert es einwandfrei.
{$APPTYPE GUI}
|
AW: Konsole Fenster unsichtbar machen
Hmmm, dann probiere es mal doch ohne {$APPTYPE CONSOLE} bzw mit {$APPTYPE GUI}.
In Deine Schleife solltest Du schon gelangen. Wenn Du dann doch mal die Console brauchen solltest ist AllocConsole() Dein Freund. //edit Zitat:
|
AW: Konsole Fenster unsichtbar machen
Mit
Delphi-Quellcode:
wird die EXE im PE-Header als Consolen-Anwendung markiert.
{$APPTYPE CONSOLE}
Windows stellt dann beim Programmstart eine Verbindung zur Console her (wenn aus einer Console oder einer anderen Consolen-Anwendung gestartet wurde) oder Windows erstellt eine Console, wenn noch Keine existiert. Ohne
Delphi-Quellcode:
kommt durch Windows also keine "automatische" Console.
{$APPTYPE CONSOLE}
Dann kann man sich aber selber damit verbinden oder Eine erstellen. ![]() ![]() ![]() ![]() Für windows ist das eine GUI-Anwendung, aber wenn aus einer Console gestartet, verhält es sich wie eine Consolen-Anwendung. * AttachConsole ... wenn das ging, dann ist schon eine Console verbunden (kann man also auch zum Prüfen verwenden, ob Console oder nicht) * will man immer eine Console, dann AttachConsole und wenn nicht AllocConsole * und will man nur GUI, dann eben nichts machen Auch wenn es eine Console-Anwendung ist, kann man dennoch eine GUI anzeigen und auch andersrum, kann eine GUI-Anwendung ebenfalls eine Console einblenden. ACHTUNG: Wenn PeekMessage ein False sagt, dann darf TranslateMessage/DispatchMessage nicht gemacht werden. Da dein WHILE keine Abbruchbedingung hat (warum nicht?), kannst auch Sleep und PeakMessage weglassen und GetMessage verwenden.
Delphi-Quellcode:
beim SetErrorMode?
+
Da werden Bits "kombiniert" und das macht man gefälligst mit OR. |
AW: Konsole Fenster unsichtbar machen
Herrlich Dein Erklärung!
Zitat:
Delphi-Quellcode:
hab ich bei meinen "dual"-Projekten verwendet. (dual = es war console und/oder gui in einer .exe, kam auf Parameter an was die .exe beim start machen sollte)
GetConsoleWindow() <> 0 und <> INVALID_HANDLE_VALUE
|
AW: Konsole Fenster unsichtbar machen
Gibt oft mehrere Wege.
Ich hatte dort halt mit AttachConsole/AllocConsole gespielt. * einmal automatisch von wo es gestartet wurde (z.B. aus CMD oder Explorer/Link) und dementsprecht Ausgabe in Console oder Anzeige einer GUI * oder via Parameter GetConsoleWindow geht explizit auf ein ConsolenFenster. Was ist, wenn das Programm unsichtbar als Console mit Umleitung der Ausgabe läuft? Auch ist es möglich eine Anwendung auf einem anderen Nuteraccount oder gar Rechner laufen zu lassen und das ConsolenFenster wo anders zu haben. Da gibt es "hier" dann kein Fenster. Mir fällt grade ein, dass ich das damals aber auch nicht beachtet hatte. Aber da könnte man die Prüfung einfach auf StdOut bzw. StdIn machen. |
AW: Konsole Fenster unsichtbar machen
Zitat:
Zitat:
Zitat:
Aber was ist bei Stromausfall? Zappenduster alles, auch Console ist weg :) |
AW: Konsole Fenster unsichtbar machen
Neeee, dafür hat man doch seine App für Restart und Recovery registriert, damit es danach wieder da ist. :lol:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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