![]() |
Re: Console in Delphiprogramm?
Zitat:
|
Re: Console in Delphiprogramm?
Hallo zusammen
Ich hab mir mit Code aus dem Forum mal folgendes zusammengebastelt, um eine Konsolenanwendung innerhalb meiner Form anzuzeigen:
Delphi-Quellcode:
Meine Frage: Wie lässt sich nun noch die Titelleiste ausblenden, damit man die Konsole nicht mehr verschieben kann?
function RunConsoleApp(const FileName: string; const Parent: THandle): THandle;
function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; begin TList(lParam).Add(Pointer(hWnd)); Result := True; end; var SI: TStartupInfo; PI: TProcessInformation; List: TList; ProcessId: DWORD; Console: THandle; I: Integer; begin Result:= 0; FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); SI.dwFlags := STARTF_USESHOWWINDOW; SI.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, SI, PI) then try Console:= 0; List:= TList.Create; try repeat List.Clear; if EnumWindows(@EnumWindowsProc, Longint(List)) then begin for I := 0 to List.Count - 1 do begin GetWindowThreadProcessId(Longint(List.Items[I]), ProcessId); if PI.dwProcessId = ProcessId then begin Console:= Longint(List.Items[I]); Break; end; end; end; until Console <> 0; finally List.Free; end; finally CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; if Console <> 0 then begin SetParent(Console, Parent); SetWindowPos(Console, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_SHOWWINDOW); Result:= Console; end; end;
Delphi-Quellcode:
geht irgendwie nicht bei Konsolen... :(
assert(SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) and not WS_CAPTION) <> 0);
Gruss Shaman |
Re: Console in Delphiprogramm?
Titelleiste ausblenden vom Form?
Delphi-Quellcode:
mffg
BorderStyle := bsNone;
freak |
Re: Console in Delphiprogramm?
Hoi
Nein, ich meine doch bei der Konsole :wink: Gruss Shaman |
Re: Console in Delphiprogramm?
Hm.. ich komm damit gar nicht klar. :cry:
mfg freak |
Re: Console in Delphiprogramm?
:warn: Du hätest Dich Freitag nur mal nach hinten umdrehen müssen, dann hätte ich Dir zeigen können, wo Du sogar schon zwei verschiedene solcher Komponenten auf Deiner Platte hast. ;)
Da Du ja aber eine OpenSource-Komponente für den Heimgebrauch haben wolltest, kommt von den beiden eh nur TJvCreateProcess in Frage. Wirf doch einfach mal einen Blick auf das ConsoleExample Projekt aus dem JvCreateProcess Beispiel der JVCL. Das macht ziemlich genau das, was Du wolltest. Downloads gibt's hier: ![]() ![]() (beides benötigt) Beide nebeneinander auspacken und dann nacheinander jcl/Install.bat und jvcl/Install.bat ausführen. Sollte eigentlich klappen. Ich installier selbst allerdings immer direkt aus CVS anstatt von den ZIPs und für den Firmengebrauch verwenden wir unsere ganz eigenen Packages. Garantieren tu ich also für nix. :zwinker: Das ist zwar ein ziemlich happiger Download für so ein kleines Problem (ca. 22 MB alles zusammen), aber im fertigen Programm landet ja hinterher nur ein kleiner Bruchteil und der Rest der beiden Bibliotheken sollte ohnehin auf keinem (Delphi-)Entwicklerrechner fehlen. :???: Viel Glück, Frohes Fest und Guten Rutsch! :) |
Re: Console in Delphiprogramm?
*hehe* Danke! :thumb:
mfg freak |
Re: Console in Delphiprogramm?
Ich hab leider die Erfahrung gemacht, dass die Umleitung des Konsolen-Output nur bei bestimmten Konsolen-Programmen funktioniert. Manchmal wird gar nix oder mit starker Verzögerung ausgegeben und manchmal geht deine CPU-Verbauch der GUI Anwendung auf 99% hoch (z.B. wenn das Konsolenprogramm alle paar Millisekunden neue Startus-Infos ausgibt)
Naja, aber bisher is JvCreateProcess der einzige Weg, der halbwegs zuverlässig funktioniert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 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