Esconder la ventana de una aplicación cónsola
Artículo por Club Developers · 01 marzo 2006
3489 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.