AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DOS-Box SW_SHOWNORMAL / SW_HIDE

Ein Thema von stz · begonnen am 17. Jul 2007 · letzter Beitrag vom 17. Jul 2007
Antwort Antwort
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#1

DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 12:00
Moin moin,
ich habe mit CreateProcess einen Konsolenanwendung gestartet
Delphi-Quellcode:
//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);
Nun will ich zu einem späteren Zeitpunkt das Fenster / die DOS-Box einblenden. Dazu hohle ich mir das Handle des Fensters:
LameWindowHandle := FindWindow('ConsoleWindowClass', PChar(ExtractFilePath(ParamStr(0)) + 'lame.exe')); Lese den WindowLong des Fensters aus:
Delphi-Quellcode:
dwNewLong := GetWindowLong(LameWindowHandle, GWL_STYLE);
  if dwNewLong = 0 then
    RaiseLastOSError;
Manipuliere den WindowLong um das Fenster anzuzeigen:
Delphi-Quellcode:
dwNewLong := dwNewLong and not SW_HIDE;
dwNewLong := dwNewLong or SW_SHOWNORMAL;
Setze den WindowLong wieder:
Delphi-Quellcode:
if SetWindowLong(LameWindowHandle, GWL_STYLE, dwNewLong) = 0 then
  RaiseLastOSError;
und erhalte folgende Fehlermeldung:
Code:
---------------------------
LameStarter
---------------------------
Systemfehler. Code: 1413.

Ungültiger Index.
---------------------------
OK  
---------------------------
Die Fehler wird genau an der letzten geposteten Quelltextzeile (RaiseLastOSError) ausgelöst.
Der Index GWL_STYLE ist aber laut PDSK genau der richtige:
Zitat von PDSK SetWindowLong Function Parameters nIndex:
GWL_STYLE
Sets a new window style.
und hat ja auch bei GetWindowLong super funktioniert. Laut Debugger habe ich sowohl ein WindowHandle als auch ein WindowLong-Wert erhalten.
Was mache ich also falsch??

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 12:20
Dumme Frage nebenbei, warum nutzt du nicht die lame.dll ?
(Irgend wo hatte ich mal ein Demo geposted... ...da.)


Eine weitere Möglichkeit ist den Ausgabetext der Lame.exe in ein Memo o. ä. umzuleiten. * klick me *

Zitat:
Was mache ich also falsch??
Fasst nix, nur das nach dem Beenden des Processes
kein Fenster mehr da ist um es anzuzeigen.

// Edit: Link added.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 12:31
Zitat von turboPASCAL:
Dumme Frage nebenbei, warum nutzt du nicht die lame.dll ?
(Irgend wo hatte ich mal ein Demo geposted... ...da.)
Super, Danke. Ich glaube, ich habe auch schon Delphi-Header unter scp.assarbad.org gefunden. Mal sehen... Aber hier geht's jetzt ums Prinzip. Was ich will muss ja auch gehen.

Zitat von turboPASCAL:
Zitat:
Was mache ich also falsch??
Fasst nix, nur das nach dem Beenden des Processes
kein Fenster mehr da ist um es anzuzeigen.
Nette These, aber mein Prozess ist definitiv noch nicht beendet. Ich würde auch nicht verstehen, wieso ich ein Fenster-Handle auslesen kann, von diesem Fenster WindowLong auslesen kann und beim Setzen kommt dann die Fehlermeldung. Das würde ja heißen, dass ich von einem nicht vorhandenen Fenster das WindowLong ausgelesen habe.
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
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 12:49
die richtige Lösung wäre mit Pipes die Ausgabe einfach umzulenken.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 13:01
Die API-Funktion MSDN-Library durchsuchenShowWindow() sollte dir da eher weiterhelfen. Dass Windows empfindlich auf das Setzen der Style-Werte reagiert, finde ich nachvollziehbar.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 13:24
aua, jetzt sehe ich erst was du gemacht hast:
Delphi-Quellcode:
dwNewLong := dwNewLong and not SW_HIDE;
dwNewLong := dwNewLong or SW_SHOWNORMAL;
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_
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:
WS_VISIBLE
Creates a window that is initially visible.
This style can be turned on and off by using ShowWindow or SetWindowPos.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 13:26
wird trotzdem nicht funktionieren. nicht mit setwindowlong.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: DOS-Box SW_SHOWNORMAL / SW_HIDE

  Alt 17. Jul 2007, 13:42
Moin moin,
autsch da ging bei mir aber einiges durcheinander

Mit ShowWindow funktioniert das ein- und ausblenden super

Fazit: Entweder Ledersitze im Opel oder E-Herd in der Küche - Ich habe verstanden

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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