![]() |
DOS-Box SW_SHOWNORMAL / SW_HIDE
Moin moin,
ich habe mit CreateProcess einen Konsolenanwendung gestartet
Delphi-Quellcode:
Nun will ich zu einem späteren Zeitpunkt das Fenster / die DOS-Box einblenden. Dazu hohle ich mir das Handle des Fensters:
//initialize the startupinfo
FillChar(myStartupInfo, SizeOf(TStartupInfo), 0); myStartupInfo.cb := Sizeof(TStartupInfo); myStartupInfo.dwFlags := STARTF_USESHOWWINDOW; myStartupInfo.wShowWindow := SW_HIDE; //start process CreateProcess(nil, PChar(Command), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(Application.ExeName)), myStartupInfo, myProcessInfo);
Delphi-Quellcode:
Lese den WindowLong des Fensters aus:
LameWindowHandle := FindWindow('ConsoleWindowClass', PChar(ExtractFilePath(ParamStr(0)) + 'lame.exe'));
Delphi-Quellcode:
Manipuliere den WindowLong um das Fenster anzuzeigen:
dwNewLong := GetWindowLong(LameWindowHandle, GWL_STYLE);
if dwNewLong = 0 then RaiseLastOSError;
Delphi-Quellcode:
Setze den WindowLong wieder:
dwNewLong := dwNewLong and not SW_HIDE;
dwNewLong := dwNewLong or SW_SHOWNORMAL;
Delphi-Quellcode:
und erhalte folgende Fehlermeldung:
if SetWindowLong(LameWindowHandle, GWL_STYLE, dwNewLong) = 0 then
RaiseLastOSError;
Code:
Die Fehler wird genau an der letzten geposteten Quelltextzeile (RaiseLastOSError) ausgelöst.
---------------------------
LameStarter --------------------------- Systemfehler. Code: 1413. Ungültiger Index. --------------------------- OK --------------------------- Der Index GWL_STYLE ist aber laut PDSK genau der richtige: Zitat:
Was mache ich also falsch?? :gruebel: Gruß Malte |
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
Dumme Frage nebenbei, warum nutzt du nicht die lame.dll ?
(Irgend wo hatte ich mal ein Demo geposted... ![]() Eine weitere Möglichkeit ist den Ausgabetext der Lame.exe in ein Memo o. ä. umzuleiten. ![]() Zitat:
kein Fenster mehr da ist um es anzuzeigen. // Edit: Link added. |
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
Zitat:
Zitat:
Außerdem würde in dem Fall eine Fehlermeldung kommen, die mir mitteilen würde, dass das Window-Handle ungültig sei. Passt also nicht so ganz... Gruß Malte |
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
die richtige Lösung wäre mit Pipes die Ausgabe einfach umzulenken.
|
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
Die API-Funktion
![]() |
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
aua, jetzt sehe ich erst was du gemacht hast:
Delphi-Quellcode:
das passt nicht. Du vermixt hier Äpfel mit Birnen. Du kannst doch auch nicht wenn du ein Auto kaufst sagen das du als Extra einen Elektrohert in dem Opel-Korsa heben willst. Das geht einfach nicht und gehört nicht zusammen. Gültige Konstanten für GWL_STYLE beginnen mit WS_
dwNewLong := dwNewLong and not SW_HIDE;
dwNewLong := dwNewLong or SW_SHOWNORMAL; deine Konstanten beginnen hingegen mit SW_ Schau dir wenn du sowas vor hast bitte vorher SetWindowLong in der Hilfe an. Um dir zu verdeutlichen was du damit versucht hast: die von dir verwendeten Konstanten: SW_Hide = 0 SW_SHOWNORMAL = 1 Windowstyles mit diesen Werten 0 = WS_OVERLAPPED 1 = gibt es nicht -> Ungültiger Index. Jetzt stell dir vor es gäbe eine Konstante mit dem Wert 1 für die Windowstyles. Dann würde diese was ganz anderes bewirken als du vor hattest. Daher nutze nur Konstanten für etwas wofür sie auch vorgesehen sind. Die Konstante WS_VISIBLE wäre hier also richtiger. Wenn du aber in die Hilfe schaust steht dort: Zitat:
|
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
wird trotzdem nicht funktionieren. nicht mit setwindowlong.
|
Re: DOS-Box SW_SHOWNORMAL / SW_HIDE
Moin moin,
autsch :oops: da ging bei mir aber einiges durcheinander Mit ShowWindow funktioniert das ein- und ausblenden super :dp: Fazit: Entweder Ledersitze im Opel oder E-Herd in der Küche - Ich habe verstanden :wink: Gruß Malte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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