htm=articulo/winfaq.htm ok articulo/winfaq.htm FAQ programacion en Windows.

FAQ programacion en Windows.

Preguntas y respuestas sobre programacion en Windows. Si tu duda no está recogida en este FAQ, enviame un e-mail.


    Donde puedo encontrar informacion completa sobre el API de Windows ?

Para un programador, la mejor recopilacion de informacion es el MSDN de Microsoft. El MSDN es un conjunto de documentos electrónicos que se pueden adquirir en cd-rom. Tambien se distribuyen junto con Visual Studio o se pueden consultar en linea en la web de Microsoft. Algunos compiladores, como los de Borland, distribuyen la ayuda del API en formato hlp.


    Tengo un formulario que queda muy bien a 640x480 pero si paso la pantalla a 1024x768 se ve todo muy pequeño. ¿ Como puedo cambiar la escala cuando cambia la resolucion ?

Observa que el resto de las aplicaciones no cambian de escala. Las resoluciones grandes se usan con monitores grandes, si usas una resolucion grande en un monitor pequeño ninguna aplicacion se ve bien. Y si, a pesar de todo, cambias de escala según la resolucion, te vas a encontrar que en un monitor grande todas las aplicaciones tendrán apariencia normal excepto la tuya que se verá enooorme.


    ¿ Cómo puedo desactivar las teclas especiales de Windows (CTRL+ALT+DEL, ALT+TAB, etc..) ?

Bajo Windows 95/98 puedes desactivar estas teclas sigueindo un procedimiento no documentado. Usa la funcion del API SystemParametersInfo, poniendo en el primer parámetro el valor 97, en el segundo True o False según quieras desactivar/activar las teclas. El tercer parámetro es una referencia a un long (32 bits) y el cuarto NULL.

SystemParametersInfo(97, TRUE o FALSE , & ref_old, NULL);


    ¿ Como puedo colocar un icono en el systray (en la barra de tareas, junto al reloj) ?

Usa la funcion del API Shell_NotifyIcon. Si programas en Visual Basic consulta el artículo Shell_NotifyIcon en Visual Basic en estas mismas páginas.


    ¿ Como puedo automátizar por programa la conexion telefónica a redes ?

Consulta en el MSDN el tema Remote Access Service (RAS) Overview. Si programas en VB puedes usar un control ocx que hay en estas mismas páginas o bien puedes hacerlo por código siguiendo las instrucciones del artículo Acceso telefónico a redes.


    ¿ Como puedo ejecutar gifs animados en un programa Windows ?

No deberías ejecutar gifs animados en Windows. El uso del formato gif no es libre, y el formato además no es muy eficiente para hacer animaciones. El formato AVI es mucho mejor. Pero si insistes, busca un control ocx llamado marchoso.ocx (aparecerá en cualquier buscador).


    Necesito acceder a los puertos hardware del PC. No me refiero al puerto de la impresora ni a los puertos serie sino a las direcciones del mapa I/O, esas que se acceden en ensamblador con inp/out. ¿ Como puedo hacerlo ?

Bajo Windows 95/98 o Windos 3.1 puedes insertar esas instrucciones asm directamente en tu código C/C++. Si usas VB o no quieres usar asm puedes probar las dll's IODLL16/IODLL32 que encontrarás en estas mismas páginas.

De cualquier modo, en Windows NT ninguno de los métodos anteriores te funcionará, solo los drivers con los máximos privilegios pueden acceder al hardware bajo Windows NT. (En el resto de los Windows tambien es buena idea dejar a los drivers que se ocupen de los accesos al hardware).


    Sé cómo detectar que el mouse está sobre mi ventana, pero ¿ cómo puedo detectar que el mouse ha salido fuera de mi ventana ?

En el momento que detectes que el mouse ha entrado en tu ventana, usa la funcion del API SetCapture para capturar el mouse. A partir de este momento recibirás mensajes del mouse incluso cuando éste salga fuera de la ventana. Para evitar problemas con el funcionamiento de otras ventanas, en todos los mensajes del mouse comprueba si este se encuentra dentro o fuera de la ventana, en cuanto detectes que el mouse está fuera de la ventana debes liberarlo con el API ReleaseCapture.


    Existe alguna llamada al sistema que te permita leer (y escribir) el numero de serie de un disco ?

Para leer, usa la funcion del API GetVolumeInformation, está funcion te devueve la etiqueta y tambien el número de serie del disco o particion. Puedes escribir la etiqueta con SetVolumeLabel pero no existe un método sencillo para cambiar el numero de serie. Este número esta grabado en el sector cero de cada particion (o unidad de disco) puedes carbiarlo usando ASM desde DOS, pero no existe un API que lo haga en Windows.


    ¿Cómo puedo obtener el browser por defecto y su ruta para ejecutarlo?

Esa informacion está guardada en el registro, bajo la clave HKEY_CLASSES_ROOT\.html

Tambien existe una función - FindExecutable - que te devuelve el nombre del programa asociado a una extension.

Sin embargo, puedes emplear directamente la función ShellExecute para ejecutar el html, esta funcion se encarga de buscar el browser por defecto.


    Estoy usando el control WebBrowser en mi aplicación, todo va bien en mi máquina pero tengo problemas para instalar mi aplicación en otros ordenadores.

Creo que deberás instalar el Internet Explorer completo en los otros ordenadores. Lee el siguiente artículo del MSDN:

               HOWTO: Distribute the WebBrowser Control
               Last reviewed: October 3, 1997
               Article ID: Q155969

    Como puedo hacer que mi programa se ejecute siempre al arrancar Windows ?

Aparte de la carpeta Inicio que conocen todos los usuarios, puedes insertar tu aplicacion en las siguientes llaves del registro:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_CURRENT_CONFIG\Software\Microsoft\Windows\CurrentVersion\Run


    Estoy usando un Timer de Windows como cronómetro, pero en ocasiones falla (`parece como si perdiera mensajes/eventos).

No debes usar los mensajes/eventos del Timer como cronómetro ya que en ocasiones el Windows acumula varios de estos mensajes en uno solo. Usa el Timer solo como método para obtener el control periódicamente, y usa la funcion del API GetTickCount para medir el tiempo con precisión en cada uno de los eventos del Timer.



© info3@maicas.net