Make Compatible es un programa desarrollado por Microsoft que se incluye en los sistemas operativos Windows 9x . Cambia la configuración del sistema de cada programa en Windows para permitir que los programas de Windows 3.1 que están diseñados específicamente para esa plataforma se ejecuten en versiones más nuevas. El nombre del archivo de imagen del programa Make Compatible es mkcompat.exe y se almacena en el directorio \Windows\System . [1] [2]
Cuando se invoca, se puede elegir el nombre del archivo de imagen del programa de aplicación de Windows 3.1 mediante la opción "Elegir programa" del menú "Archivo". Una vez elegido el archivo de imagen del programa, Make Compatible muestra de forma predeterminada una lista de cinco opciones que se pueden configurar para modificar el comportamiento de Windows para ese programa cuando se ejecuta: [1]
Un modo de opciones avanzadas, seleccionable a través de la selección "Opciones avanzadas" en el menú "Archivo", presenta una lista más larga de opciones, lo que permite un control más preciso de la emulación de Windows 3.1 si la aplicación en particular lo requiere. [1]
Cada una de las opciones se registra en una base de datos del sistema de los llamados "bits de compatibilidad". Se trata de una base de datos de indicadores de 1 bit, uno para cada una de las opciones que muestra Make Compatible. [3] [4]
Esta base de datos ya existía en versiones anteriores de Windows. En Windows 3.1, la base de datos se almacena en la sección [Compatibilidad] de win.ini , con entradas como: [3] [4]
[Compatibilidad] ACAD = 0x8000 AMIPRO = 0x04000010
Cada línea nombra un programa de aplicación y proporciona una constante numérica hexadecimal para asociarlo con ese programa. La constante numérica hexadecimal codifica los indicadores de compatibilidad para esa aplicación en particular, que Windows aplica cuando se ejecuta la aplicación. Make Compatible simplemente proporciona una interfaz gráfica de usuario para editar estos indicadores de una manera fácil, en lugar de editar win.ini manualmente con un editor de texto. Permite configurar y desconfigurar indicadores individuales sin tener que conocer sus valores numéricos. [3] [4]
Los indicadores de compatibilidad que se pueden configurar en win.ini no están documentados en el archivo WININI.WRI que se entrega con Windows 3.1, ni en el Kit de recursos de Microsoft Windows 3.1 publicado por Microsoft. Se enumeran como un conjunto simple de constantes definidas (con nombres que comienzan con "GACF_" para "GetAppCompatFlags"), sin explicación, en el archivo de encabezado windows.h que se entrega con el Kit de desarrollo de controladores de dispositivos de Microsoft Windows 3.1. En Windows 3.1, los indicadores de compatibilidad que están en efecto para cualquier tarea dada en la base de datos de tareas del núcleo se pueden leer a través de la función no documentada que se exporta desde el módulo KERNEL . [5] GetAppCompatFlags()
Las banderas están documentadas en el artículo n.° 82860 de Microsoft Knowledge Base. Corresponden a las banderas de "modo avanzado" que se pueden configurar mediante el menú "Opciones avanzadas" de Make Compatible: [5]
0x80000
, conocido por el nombre simbólico GACF_30AVGWIDTH
en windows.h . Esta bandera hace que Windows vuelva a escalar todas las fuentes por un factor de al calcular sus anchos de caracteres promedio. La razón de esto es que una aplicación particular de Windows 3.0, TurboTax , codificó de forma rígida los valores que estaba usando para dichos cálculos de tamaño, lo que no funcionó correctamente con el nuevo método de cálculo de ancho promedio de fuente compatible con TrueType empleado por Windows 3.1. Esto impidió que las personas usaran TurboTax para imprimir sus formularios de declaración de impuestos sobre la renta en impresoras PostScript . [5]0x40
, conocido por el nombre simbólico GACF_ALWAYSSENDNCPAINT
en windows.h . Esta bandera obliga a cualquier llamada a que cause el envío de un mensaje a todas las ventanas secundarias. Este es el comportamiento de Windows 3.0. En Windows 3.1, el comportamiento se modificó para que el mensaje de ventana solo se envíe a aquellas ventanas que necesitan que se vuelvan a pintar sus áreas no cliente. Sin embargo, algunas aplicaciones de Windows 3.0 dependían de recibir siempre este mensaje para determinar si las ventanas secundarias necesitaban reposicionarse. [5]SetWindowPos()
WM_NCPAINT
0x2000
, conocido por el nombre simbólico GACF_ENUMTTNOTDEVICE
en windows.h . Esta bandera hace que Windows 3.1 desactive la bandera en circunstancias particulares cuando una aplicación que desea imprimir enumera fuentes. Las circunstancias particulares son cuando la impresora de destino no es una impresora matricial ni una impresora PostScript, y las fuentes son fuentes TrueType que no residen en la propia impresora. En tales circunstancias, algunas aplicaciones (incluidas PageMaker y MGXDraw) malinterpretan la bandera y creen que la fuente reside en el dispositivo. (Windows puede cargar fuentes TrueType en las impresoras y no es necesario que residan en el propio dispositivo para que se puedan usar). Luego consultan a la impresora para ver qué tamaños de fuente admite y, cuando eso falla (porque la impresora no sabe acerca de la fuente hasta que se carga), suponen incorrectamente que la fuente no se puede cambiar de tamaño. Establecer el indicador como falso en tales situaciones evita que las aplicaciones funcionen mal, y eso es lo que hace este indicador de bits de compatibilidad. [5]DEVICE_FONTTYPE
DEVICE_FONTTYPE
WM_MOVE
0x20000
, conocido por el nombre simbólico GACF_NCCALCSIZEONMOVE
en windows.h . Esta bandera obliga a que el mensaje se envíe a una ventana que se está moviendo o redimensionando. Este es el comportamiento de Windows 3.0. En Windows 3.1, el comportamiento se modificó para que el mensaje de ventana solo se envíe a aquellas ventanas que se están redimensionando. No se enviaba si la ventana simplemente se movía. Sin embargo, algunas aplicaciones de Windows 3.0, como Lotus Notes por ejemplo, dependían de recibir siempre este mensaje. [5]WM_NCCALCSIZE
0x1000
, conocido por el nombre simbólico GACF_ENUMHELVNTMSRMN
en windows.h . Este indicador soluciona un problema con las aplicaciones que se negaban a funcionar correctamente a menos que las fuentes con los nombres exactos "Helv" y "Tms Rmn" estuvieran listadas como presentes en el sistema por la API de enumeración de fuentes de Windows. Los nombres son marcas comerciales de la empresa Linotype para fuentes particulares, Helvetica y Times Roman , y como Microsoft no envió esas fuentes Linotype con Windows 3.1, no pudo enumerarlas como presentes. Este indicador hace que Windows enumere las fuentes "MS Sans Serif" y "MS Serif" bajo los nombres "Helv" y "Tms Rmn", para compatibilidad con las aplicaciones que no funcionan sin que se utilicen esos nombres exactos. [5]0x100
, conocido por el nombre simbólico GACF_MOREEXTRAWNDWORDS
en windows.h . Este indicador soluciona un problema con las aplicaciones que asumían la existencia de palabras de ventana (elementos adicionales de datos asociados por Windows con ventanas GUI) cuando en realidad no habían informado a Windows de que se necesitaban palabras de ventana adicionales. Windows 3.1, a diferencia de Windows 3.0, realiza comprobaciones de límites para todos los usos de palabras de ventana adicionales, y las aplicaciones que asumían que podían usar más espacio del que habían solicitado fallaban. Para las aplicaciones que se ejecutan con este indicador establecido, Windows 3.1 aumentó silenciosamente el número total de palabras solicitadas por la aplicación en 4 bytes adicionales. [5]0x2
, conocido por el nombre simbólico GACF_FORCETEXTBAND
en windows.h . Esta bandera hace que Windows 3.1 siempre use dos bandas al imprimir, la primera para gráficos y la segunda para texto. Normalmente Windows 3.1 intenta imprimir ambas en una sola banda. Pero aplicaciones como WordPerfect asumían que siempre existiría una segunda banda, y que siempre estaría donde estaba el texto, como había sido el caso en Windows 3.0. Freelance Graphics tenía un problema similar. [5]0x8000
, conocido por el nombre simbólico GACF_FORCETTGRAPHICS
en windows.h . Esta bandera se creó para solucionar un problema con Freelance Graphics , donde no se imprimía usando fuentes TrueType a menos que se imprimieran como gráficos. [5]0x1
, conocido por el nombre simbólico GACF_IGNORENODISCARD
en windows.h . Esta bandera obliga a que se ignore la bandera pasada a por un programa. Solucionaba un error en la biblioteca de tiempo de ejecución suministrada con el compilador C de Microsoft , Microsoft C versión 6. La biblioteca de tiempo de ejecución establecería erróneamente esa bandera en llamadas a , y cualquier aplicación compilada con ese compilador exhibiría, por lo tanto, el comportamiento. [5]GEM_NODISCARD
GlobalAlloc()
GlobalAlloc()
0x200
, conocido por el nombre simbólico GACF_TTIGNORERASTERDUPE
en windows.h . Esta bandera evita que las fuentes del mismo tamaño se enumeren como fuentes de mapa de bits y TrueType. Esto se debía a que varias aplicaciones, incluidas WordPerfect y Visual Basic , no eran capaces de manejar esa situación particular correctamente. [5]0x8
, conocido por el nombre simbólico GACF_IGNORETOPMOST
en windows.h . Esta bandera corrige un problema particular con cc:Mail que causaba que fallara en Windows 3.1. Suponía que acceder a la primera ventana con devolvería la ventana de la aplicación con la que acababa de iniciarse . Pero en Windows 3.1, que introdujo la idea de ventanas "superiores", esto ya no era así. La bandera hacía que Windows 3.1 omitiera las ventanas superiores cuando se realizaba esa solicitud de API en particular. [5]GetWindow(HWND,GW_HWND_FIRST)
WinExec()
0x10000
, conocido por el nombre simbólico GACF_NOHRGN1
en windows.h . Esta bandera restablece un error que existía en Windows 3.0 y que se solucionó en Windows 3.1. Esto se debió a que varias aplicaciones, como Microsoft Draw, solucionaron el error por sí mismas y no funcionaban correctamente cuando se eliminaba el error. El error era un error en el valor de retorno de la función, por el cual en ciertas situaciones (cuando la ventana completa no era válida) devolvía las coordenadas del rectángulo de actualización en coordenadas de ventana, en lugar de coordenadas lógicas como se suponía que debía hacerlo. En Windows 3.1, siempre devolvía el rectángulo de actualización en coordenadas lógicas. Las aplicaciones que solucionaron el error realizaban la transformación de coordenadas por sí mismas para solucionar el error y terminaban actualizando las partes incorrectas de sus ventanas en Windows 3.1. [5]GetUpdateRect()
0x4
, conocido por el nombre simbólico GACF_ONELANDGRXBAND
en windows.h . Esta bandera hace que Windows 3.1 utilice una sola banda de gráficos al imprimir en modo horizontal , consumiendo tanta memoria como sea necesaria para esa banda y descartando cualquier contenido que no quepa en la banda. [5]0x4000
, conocido por el nombre simbólico GACF_SUBTRACTCLIPSIBS
en windows.h . Este indicador hace que Windows 3.1 gestione la invalidación de ventanas de forma diferente para las ventanas de nivel superior que no tienen el estilo de ventana establecido y sus ventanas secundarias. (En otras palabras: afecta a los cuadros de diálogo y a los controles que contienen). Con el indicador establecido, Windows no invalidaría las ventanas secundarias hermanas que se encuentren debajo (en el orden z ) de otras ventanas secundarias. La razón principal para el indicador eran aplicaciones como Lotus Notes 2.1, que implementaban sus propios cuadros combinados como ventanas secundarias, en lugar de como ventanas de nivel superior (la implementación predeterminada del cuadro combinado del sistema). Con este indicador establecido, desaparecerían los problemas de visualización extraños con dichas ventanas. [5]WS_CLIPSIBLINGS
WS_CLIPSIBLINGS
0x20
, conocido por el nombre simbólico GACF_MULTIPLEBANDS
en windows.h . Esta bandera hace que Windows 3.1 siempre use múltiples bandas para imprimir, incluso cuando una banda sería suficiente. Esto era para solucionar un problema en Freelance Graphics, que suponía que si solo existía una banda, y era la página completa, era la banda de texto, y ni siquiera intentaba imprimir gráficos. En Windows 3.1, el controlador de impresora universal a veces podía manejar tanto texto como gráficos con una sola banda. Al forzar el uso de múltiples bandas, se evitaron los problemas que esto causaría para Freelance Graphics. [5]0x10
, conocido por el nombre simbólico GACF_CALLTTDEVICE
en windows.h . Esta bandera hace que Windows 3.1 siempre establezca la bandera en cualquier fuente TrueType que se enumere utilizando la API de Windows. Esto se hizo para solucionar un problema con aplicaciones como AmiPro y WordPerfect, que asumían que todas las fuentes TrueType disponibles en una impresora serían residentes en el dispositivo. [5]DEVICE_FONTTYPE
EnumFont()
Windows 3.1 definió 20 indicadores de compatibilidad de aplicaciones. [5] Windows 95 y 98 definieron otros 11 indicadores, no documentados en el artículo de KnowledgeBase y a los que no se les asignaron nombres de constantes simbólicos en windows.h , que son el resto de las opciones accesibles a través del menú "Opciones avanzadas" en Hacer compatible: [6]
0x20000000
.0x4000000
.0x1000000
.SetActiveWindow
==SetForeGroundWindow
0x10000000
.0x2000000
.0x8000000
.0x800000
.0x400000
.SetDIBits
validación0x100000
.0x200000
.0x40000000
.{{cite journal}}
: Requiere citar revista |journal=
( ayuda )