Konsole verstecken --> ist nicht mehr in der FAQ !!!
-
Hallo,
ich möchte eine Konsole verstecken, allerdings arbeite ich mit dem DevCpp (MinGW) und irgendwie sagt er in den Funktionen
const bool BeautifierWidget::HideConsole() { return ( ShowWindow ( GetConsoleWindow() , SW_HIDE ) && true ); } const bool BeautifierWidget::ShowConsole() { return ( ShowWindow ( GetConsoleWindow() , SW_SHOW ) && true ); }
dass er GetConsoleWindow() nicht kennt. Ich habe die Windows.h inkludiert und arbeite unter WinXP.
kann mir jemand nochmal die alte gute kurze Lösung von Volkard geben? Die war doch ohne GetConsoleWindow ?!?
Gruß Patrick
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getconsolewindow.asp
Selebst wenn Mann/Frau die MSDN nicht kennt findet man es bei Google gleich an erster Stelle.
Gruß
-
Schau dir mal die Implementierung von getCWND() in der Improved Console (http://ic.sidewindershome.net) an. Dort findest du für ältere Platform-SDKs einen Ersatzweg
MfG SideWinder
-
Hi ihr zwei,
ich habe die Funktion GetConsoleWindow schon gefunden und ich habe auch gelesen, dass ich
_WIN32_WINNT as 0x0500 or later
definieren soll.
Wenn ich _WIN32_WINNT definiere, bekomme ich den Fehler, dass ich es redefine. Also habe ich erst ein #undef und dann dass #define gemacht, aber er kennt die Funktion dennoch nicht.
Ich arbeite unter Microsoft Windows XP SP2 mit allen aktuellen Hotfixes und benutze die Bloodshed DevCpp IDE in der version 5 (Beta) mit dem MinGW Compiler. Ich habe keine Ahnung wieso es nicht klappt.
Es handelt sich bei meinem Projekt um eine Anwendung mit grafischer Oberfläche (QT 4.0.1 OS) in der ich mehrere Konsolenprogramme aufrufe. Die Konsolen sollen wie gesagt aber nicht sichtbar sein.
@Sidewinder:
Die implementierung Deiner Improved Console benutzt Du ja auch den Aufruf der Funktion GetConsoleWindow. Die andere Alternative ist doch für ältere Systeme wie z.B. Windows 9X, ME usw. gedacht, oder?Ich hoffe, ihr habt noch einen Tipp für mich,
Gruß Paddy
-
@Sidewinder:
Die implementierung Deiner Improved Console benutzt Du ja auch den Aufruf der Funktion GetConsoleWindow. Die andere Alternative ist doch für ältere Systeme wie z.B. Windows 9X, ME usw. gedacht, oder?Nicht nur für ältere Systeme sondern auch für ältere Platform-SDKs (und dein Compiler hat kein aktuelles weils das für diesen Compiler ganz einfach nicht gibt). Es wird auch in der MSDN dieser Weg empfohlen.
Zum Titel: Diese Themen sind allesamt in die Improved Console gewandert. Ich verweise immer in den Source-Code
MfG SideWinder
-
Es handelt sich bei meinem Projekt um eine Anwendung mit grafischer Oberfläche (QT 4.0.1 OS) in der ich mehrere Konsolenprogramme aufrufe. Die Konsolen sollen wie gesagt aber nicht sichtbar sein.
Holst du dir für deinen Proezss eine Konsole mit AttachConsole() und führst dann dort Befehle aus? Nutzlos, da kannst du die Befehle auch gleich so in deinem Programm ausführen.
Führst du allerdings ein externes Konsolenprgoramm aus (ShellExecute, CreateProcess, sth like that) hast du mit GetConsoleWindow() afaik sowieso keine Chance weil die Funktion immer nur die eigene Konsole holt. Dann musst du sowieso über FindWindow gehen -> oder wiederrum besser ohne den Umweg in eine Konsole
MfG SideWinder
-
zum thema:
ich (win2k pro) versuche gerade ungefaehr dasselbe hinzubekommen, im grunde lediglich den handle fuer die ausfuehrende konsole per GetConsoleWindow() zu ermitteln.
funktioniert bisher aber weder im MinGW (3.4.2) noch mit dem extra frisch installierten Microsoft Visual C++ Toolkit 2003.
bekomme immer einen aufloesungsfehler vom linker, im falle vom MSVC++ auf meine eingabe "cl src.c /link Kernel32.lib":
C:[C++]\shutdown>cl shutdown.c /O1 /link Advapi32.lib User32.lib Kernel32.lib Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 Copyright (C) Microsoft Corporation 1984-2002. All rights reserved. shutdown.c Microsoft (R) Incremental Linker Version 7.10.3077 Copyright (C) Microsoft Corporation. All rights reserved. /out:shutdown.exe Advapi32.lib User32.lib Kernel32.lib shutdown.obj shutdown.obj : error LNK2019: unresolved external symbol _GetConsoleWindow referenced in function _main shutdown.exe : fatal error LNK1120: 1 unresolved externals
ps: umgebunsvariablen (inlcude usw) muessten (vom MSVC++ toolkit installer) alle gesetzt sein und moechte es gerne in der normalen, will sagen nicht in der improved console hinbekommen.
thx
-
Du benötigst dafür das neueste Platform-SDK, downloadbar auf der Microsoft-Seite. Das hilft allerdings nur bei einem MS-Compiler.
Mit allen anderen Compilern die noch kein aktuelles Platform-SDK mitliefern musst du den Hack aus der Implementierung der IC verwenden
MfG SideWinder
-
Wenn Du die Console loswerden willst kannst Du auch "FreeConsole" aufrufen...
GetConsoleWindow ist erst ab w2k verfügbar (und dann mit einem aktuellen PSDK). Wobei, wenn Du mit VC6 arbeitest darfst Du nicht das neueste nehmen sondern das Feb2003: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
-
Moin SideWinder THX fuer prompte antwort!
ohje ich vergass: ich HABE das neuste Platform-SDK gestern bereits installiert (ca 3h download grmpf)
so stands ja auch weiter oben, nicht dass ich hier nicht alles aufmerksamst lesen wuerde..
*kopfkratz*
-
Wobei, wenn Du mit VC6 arbeitest darfst Du nicht das neueste nehmen sondern das Feb2003: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
AHA, dann wirds wohl das gewesen sein? ich hatte meins von hier
http://www.microsoft.com/downloads/details.aspx?FamilyID=eba0128f-a770-45f1-86f3-7ab010b398a3&DisplayLang=ennoch aus intresse: und warum nicht das aktuelle?
cheers
-
und aus gesteigertem intresse: und warum sagt mir das keiner!?
-
iowews schrieb:
Wobei, wenn Du mit VC6 arbeitest darfst Du nicht das neueste nehmen sondern das Feb2003: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
AHA, dann wirds wohl das gewesen sein? ich hatte meins von hier
http://www.microsoft.com/downloads/details.aspx?FamilyID=eba0128f-a770-45f1-86f3-7ab010b398a3&DisplayLang=enNaja eher nicht... bei dem ganz neuen ist diese Funktion auch dabei, Du solltest hat nur mal die Hilfe lesen und hättest dann festgestellt, dass Du "_WIN32_WINNT" als "0x0500" oder höher definieren musst...
iowews schrieb:
noch aus intresse: und warum nicht das aktuelle?
Das w2k3-sp1 ist nicht mit VC6 getestet und teilweise sind die LIBs nicht mehr mit dem Linker kompatibel...
-
@ionews: Ich sehe bei deinem Output allerdings den VC2003 im Einsatz, das aktuelle Platform-SDK ist damit kompatibel
Einziger Fehler der mir jetzt so einfallen würde ist, dass du die Pfade nicht auf das neue Platform-SDK gesetzt hast und der Compiler trotz Installation des Neuen immer noch das Alte benützt.
Wenn Du die Console loswerden willst kannst Du auch "FreeConsole" aufrufen...
Damit wird für den aktuellen Prozess die Konsole dealloziert. Afaik geht das aber nicht bei Konsolenanwendungen sondern nur bei "normalen" Win32-Anwendungen.
MfG SideWinder
-
thx fuer beistand vorab!
Du solltest hat nur mal die Hilfe lesen und hättest dann festgestellt, dass Du "_WIN32_WINNT" als "0x0500" oder höher definieren musst...
hab ich..
Damit wird für den aktuellen Prozess die Konsole dealloziert. Afaik geht das aber nicht bei Konsolenanwendungen sondern nur bei "normalen" Win32-Anwendungen.
bei mir funktionierts jetzt auch so, wuerde aber dennoch gerne wissen warum nicht anders.
hier die (wie ich hoffe relevanten) vom installer automatisch gesetzen umgebungsvariablen:
Path=C:\USR_BIN\texmf\miktex\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\USR_BIN;C:\USR_BIN \nmap-3.81;C:\USR_BIN\cygwin\bin;C:\USR_BIN\Dev-Cpp\bin;C:\USR_BIN\Java\jdk1.5.0_05\bin;C:\USR_BIN\Microsoft V isual C++ Toolkit 2003\bin;C:\USR_BIN\Microsoft Platform SDK\Bin\.;C:\USR_BIN\Microsoft Platform SDK\Bin\WinNT \. INCLUDE=C:\USR_BIN\Microsoft Platform SDK\Include\.;C:\USR_BIN\Microsoft Visual C++ Toolkit 2003\include
-
Der Installer macht afaik ncihts automatisch. Im Startmenü hast du nen Eintrag vom Platform-SDK, dort gibts irgendwo einen ganzen Haufen an "Register System-Variables"-Bat-Files. Das richtige (zB 32bit Windows) auswählen und dann loslegen.
BTW: Hast du jetzt VC6 oder VC2003 im Einsatz?
bei mir funktionierts jetzt auch so
Eh jo. Das heißt ich hätt mri mein Post eben sparen können?
MfG SideWinder
-
BTW: Hast du jetzt VC6 oder VC2003 im Einsatz?
halt das "abgespeckte" Microsoft Visual C++ Toolkit 2003, also letzteren wie ich annehmme. ..?.. bin etwas neu hier :p
Eh jo. Das heißt ich hätt mri mein Post eben sparen können?
moeglich, aber nur in Bezug auf FreeConsole() !
Der Installer macht afaik ncihts automatisch. Im Startmenü hast du nen Eintrag vom Platform-SDK, dort gibts irgendwo einen ganzen Haufen an "Register System-Variables"-Bat-Files. Das richtige (zB 32bit Windows) auswählen und dann loslegen.
UND ES GEHT!!thousand thx hehe, juut dass wir drueber geredet haben.