Esconder la ventana de una aplicación cónsola
Artículo por Club Developers · 01 marzo 2006
4054 vistas
En Win9x y NT podemos usar la función [/b]ShowWindow[/b] juntamente con FindWindows del API. [/b]ShowWindow[/b] en este caso esconde la ventana de la cónsola en la pantalla, en la barra de herramientas y en el gestor de programas. En un entorno NT usando las "policies" podremos evitar que un usuario pueda cerrar esta aplicación cónsola.
En Windows XP y 2003 sólo podemos usar la función GetConsoleWindow junto a la función ShowWindow.
Queda otra posibilidad y es crear un programa cónsola y modificar la directiva $APPTYPE. Reemplazando únicamente la directiva {$APPTYPE CONSOLE} por {$APPTYPE GUI}, habremos terminado.
Nota: en este caso los handles estándars usados para las funciones Write y Read no estarán accesibles. Usarlos probocará errores en la ejecución.
El código ha sido probado en Windows 98 SE, NT, W2K y XP.
delphi
var NuevoTitulo: String; AntiguoTitulo: Array[0..512]of char; begin // memoria del título en curso de la ventana GetConsoleTitle(PChar(@AntiguoTitulo), SizeOf(AntiguoTitulo)); // construir un nombre único NuevoTitulo := Format('%d%d', [GetTickCount, GetCurrentProcessId]); // damos el título único a la cónsola SetConsoleTitle(Pchar(NuevoTitulo)); Writeln('ocultar ventana'); // espera para asegurarnos que el título se ha actualizado. MÃnimo Sleep(40) Sleep(2000); // Ocultar ventana // FindWindows obtiene el handle. ShowWindow( FindWindow(NIL, PChar(NuevoTitulo)), SW_HIDE); Writeln('mostrar la ventana'); Sleep(2000); // muestra la ventana escondida anteriormente ShowWindow( FindWindow(NIL, PChar(NuevoTitulo) ), SW_SHOW); // reasignamos título original SetConsoleTitle(PChar(@AntiguoTitulo)); end.
En Windows XP y 2003 sólo podemos usar la función GetConsoleWindow junto a la función ShowWindow.
delphi
function GetConsoleWindow:HWnd;Stdcall; external 'Kernel32.dll'; var Titulo: Array[0..512] of char; begin // guardar el título de la ventana GetConsoleTitle(PChar(@Titulo), SizeOf(Titulo)); ... ShowWindow(GetConsoleWindow, SW_HIDE); ... end.
Queda otra posibilidad y es crear un programa cónsola y modificar la directiva $APPTYPE. Reemplazando únicamente la directiva {$APPTYPE CONSOLE} por {$APPTYPE GUI}, habremos terminado.
Nota: en este caso los handles estándars usados para las funciones Write y Read no estarán accesibles. Usarlos probocará errores en la ejecución.
El código ha sido probado en Windows 98 SE, NT, W2K y XP.


