Make Compatible es un programa desarrollado por Microsoft que se incluye con los sistemas operativos Windows 9x . Cambia la configuración del sistema por 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 recientes. El nombre del archivo de imagen del programa para Make Compatible es mkcompat.exe y se almacena en el directorio \ Windows \ System . [1] [2]
Opciones
Cuando se invoca, se puede elegir el nombre del archivo de imagen del programa de aplicación de Windows 3.1 usando la opción "Elegir programa" en el menú "Archivo". Una vez elegido el archivo de imagen del programa, Hacer compatible de forma predeterminada muestra una lista de cinco opciones que se pueden configurar para modificar el comportamiento de Windows para ese programa cuando se ejecuta: [1]
- No ponga en cola a archivos meta mejorados [1]
- Dar a la aplicación más espacio en la pila [1]
- Miente sobre el tamaño del modo del dispositivo de la impresora [1]
- Miente sobre el número de versión de Windows [1]
- Controles de estilo Windows 3.1 [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]
Bits de compatibilidad
Cada una de las opciones se registra en una base de datos del sistema de los denominados "bits de compatibilidad". Esta es una base de datos de banderas de 1 bit, una para cada una de las opciones mostradas por 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 el 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 asociar con ese programa. La constante numérica hexadecimal codifica las banderas de bits 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. Le permite a uno configurar y desarmar banderas individuales sin tener que conocer sus valores numéricos. [3] [4]
Las banderas de bits de compatibilidad configurables en win.ini no están documentados en el Archivo WININI.WRI que se incluye con Windows 3.1 o 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 "GACF_" por "GetAppCompatFlags"), sin explicación, en el archivo de encabezado windows.h que se envía con el Kit de desarrollo de controlador de dispositivo de Microsoft Windows 3.1. En Windows 3.1, los indicadores de compatibilidad que están en vigor para cualquier tarea dada en la base de datos de tareas del kernel se pueden leer a través de la GetAppCompatFlags()
función no documentada que se exporta desde la Módulo KERNEL . [5]
Banderas de modo avanzado
Los indicadores están documentados en el artículo 82860 de Microsoft KnowledgeBase. Corresponden a los indicadores de "modo avanzado" que se pueden configurar en el menú "Opciones avanzadas" de Make Compatible: [5]
- 30 métricas de ancho promedio
- Este es el bit # 19 de la palabra de bits de compatibilidad, con valor hexadecimal
0x80000
, conocido por el nombre simbólicoGACF_30AVGWIDTH
en windows.h . Esta bandera hace que Windows vuelva a escalar todas las fuentes en un factor de al calcular el ancho medio de los caracteres. La razón de esto es que una aplicación particular de Windows 3.0, TurboTax , codificó los valores que estaba usando para tales cálculos de tamaño, 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] - Enviar siempre NC_Paint
- Este es el bit # 6 de la palabra de bits de compatibilidad, con valor hexadecimal
0x40
, conocido por el nombre simbólicoGACF_ALWAYSSENDNCPAINT
en windows.h . Esta bandera obliga a cualquier llamada aSetWindowPos()
provocar el envío de unWM_NCPAINT
mensaje a todas las ventanas secundarias. Este es el comportamiento de Windows 3.0. En Windows 3.1, se cambió el comportamiento para que el mensaje de la ventana solo se envíe a aquellas ventanas que necesitan que se vuelvan a pintar sus áreas que no son de cliente. Sin embargo, algunas aplicaciones de Windows 3.0 confiaban en recibir siempre este mensaje para determinar si era necesario reposicionar las ventanas secundarias. [5] - No enumere las fuentes del dispositivo
- Este es el bit # 14 de la palabra de bits de compatibilidad, con valor hexadecimal
0x2000
, conocido por el nombre simbólicoGACF_ENUMTTNOTDEVICE
en windows.h . Este indicador hace que Windows 3.1 loDEVICE_FONTTYPE
desactive en determinadas circunstancias 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 el indicador y creen que la fuente reside en el dispositivo. (Las fuentes TrueType pueden ser cargadas por Windows a las impresoras, y no es necesario que estén residentes en el dispositivo para que sean utilizables). Luego, consultan a la impresora para ver qué tamaños de fuente admite y cuándo falla (porque la impresora no lo hace). no conocen la fuente hasta que se carga), asumen incorrectamente que no se puede cambiar el tamaño de la fuente. Establecer elDEVICE_FONTTYPE
indicador en falso en tales situaciones evita que las aplicaciones salgan mal, y eso es lo que hace este bitflag de compatibilidad. [5] - No envíe calcsize
WM_MOVE
- Este es el bit # 17 de la palabra de bits de compatibilidad, con valor hexadecimal
0x20000
, conocido por el nombre simbólicoGACF_NCCALCSIZEONMOVE
en windows.h . Esta bandera obliga a que elWM_NCCALCSIZE
mensaje se envíe a una ventana que se está moviendo o cambiando de tamaño. Este es el comportamiento de Windows 3.0. En Windows 3.1, se cambió el comportamiento para que el mensaje de la ventana solo se envíe a aquellas ventanas cuyo tamaño se estaba cambiando. No se envió si la ventana simplemente se movió. Sin embargo, algunas aplicaciones de Windows 3.0, como Lotus Notes, por ejemplo, confiaban en recibir siempre este mensaje. [5] - Fuentes Enum Helv y Times Roman
- Este es el bit # 12 de la palabra de bits de compatibilidad, con valor hexadecimal
0x1000
, conocido por el nombre simbólicoGACF_ENUMHELVNTMSRMN
en windows.h . Este indicador soluciona un problema con las aplicaciones que se niegan a funcionar correctamente a menos que las fuentes con los nombres exactos "Helv" y "Tms Rmn" aparezcan en el sistema mediante la API de enumeración de fuentes de Windows. Los nombres son marcas comerciales de la compañía Linotype para fuentes particulares, Helvetica y Times Roman , y dado que Microsoft no envió esas fuentes Linotype con Windows 3.1, no pudo enumerarlas como presentes. Esta bandera 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 esos nombres exactos. [5] - Forzar palabras adicionales de Windows
- Este es el bit # 8 de la palabra de bits de compatibilidad, con valor hexadecimal
0x100
, conocido por el nombre simbólicoGACF_MOREEXTRAWNDWORDS
en windows.h . Esta bandera soluciona un problema con aplicaciones que asumían la existencia de palabras de ventana (elementos adicionales de datos asociados por Windows con ventanas GUI) cuando de hecho no habían informado a Windows que se requerían palabras de ventana adicionales. Windows 3.1, a diferencia de Windows 3.0, comprueba todos los usos de las palabras de ventana adicionales y las aplicaciones que suponían que podían usar más espacio del que habían pedido fallarían. Para las aplicaciones que se ejecutan con este conjunto de indicadores, Windows 3.1 aumentó silenciosamente el número total de palabras solicitadas por la aplicación en 4 bytes adicionales. [5] - Forzar el texto de la impresora a una nueva banda
- Este es el bit # 1 de la palabra de bits de compatibilidad, con valor hexadecimal
0x2
, conocido por el nombre simbólicoGACF_FORCETEXTBAND
en windows.h . Este indicador hace que Windows 3.1 utilice siempre dos bandas al imprimir, la primera para gráficos y la segunda para texto. Normalmente, Windows 3.1 intenta imprimir ambos en una sola banda. Pero aplicaciones como WordPerfect asumieron 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 tuvo un problema similar. [5] - Forzar fuentes TT a la banda de gráficos
- Este es el bit # 15 de la palabra de bits de compatibilidad, con valor hexadecimal
0x8000
, conocido por el nombre simbólicoGACF_FORCETTGRAPHICS
en windows.h . Esta bandera era para solucionar un problema con Freelance Graphics , donde no se imprimía con fuentes TrueType a menos que se imprimieran como gráficos. [5] - Los ganchos globales solo requieren aplicaciones Win16
- Ignorar atributos de segmento descartables
- Este es el bit # 0 de la palabra de bits de compatibilidad, con valor hexadecimal
0x1
, conocido por el nombre simbólicoGACF_IGNORENODISCARD
en windows.h . Esta bandera obliga a que laGEM_NODISCARD
bandera pasadaGlobalAlloc()
por un programa sea ignorada. Resolvió un error en la biblioteca de tiempo de ejecución proporcionada con el propio compilador de C de Microsoft , Microsoft C versión 6. La biblioteca de tiempo de ejecución establecería erróneamente ese indicador en las llamadas aGlobalAlloc()
, y cualquier aplicación compilada con ese compilador mostraría el comportamiento. [5] - Ignorar fuentes ráster
- Este es el bit # 9 de la palabra de bits de compatibilidad, con valor hexadecimal
0x200
, conocido por el nombre simbólicoGACF_TTIGNORERASTERDUPE
en windows.h . Este indicador evita que las fuentes del mismo tamaño se enumeren como fuentes de mapa de bits y TrueType. Esto se debió a que varias aplicaciones, incluidas WordPerfect y Visual Basic , no eran capaces de manejar esa situación en particular correctamente. [5] - Ignorar las ventanas superiores
- Este es el bit # 3 de la palabra de bits de compatibilidad, con valor hexadecimal
0x8
, conocido por el nombre simbólicoGACF_IGNORETOPMOST
en windows.h . Este indicador corrige un problema particular con cc: Mail que provocó que fallara en Windows 3.1. Asumió que acceder a la primera ventana conGetWindow(HWND,GW_HWND_FIRST)
le devolvería la ventana de la aplicación con la que acababa de comenzarWinExec()
. Pero en Windows 3.1, que introdujo la idea de las ventanas "superiores", esto ya no era cierto. El indicador hizo que Windows 3.1 omitara las ventanas superiores cuando se realizó esa solicitud de API en particular. [5] - Hack de módulo específico
- Sin HRGN 1
- Este es el bit # 16 de la palabra de bits de compatibilidad, con valor hexadecimal
0x10000
, conocido por el nombre simbólicoGACF_NOHRGN1
en windows.h . Este indicador restablece un error que existía en Windows 3.0 que se corrigió en Windows 3.1. Lo hizo porque varias aplicaciones, como Microsoft Draw , solucionaron el error por sí mismas y no funcionarían correctamente cuando se eliminó el error. El error fue un error en el valor de retorno de laGetUpdateRect()
función, por lo que en ciertas situaciones (donde toda la ventana no era válida) devolvería las coordenadas del rectángulo de actualización en las coordenadas de la ventana, en lugar de en las coordenadas lógicas como se suponía. En Windows 3.1, siempre devolvía el rectángulo de actualización en coordenadas lógicas. Las aplicaciones que solucionaron el error realizarían la transformación de coordenadas a sí mismas para solucionar el error y terminarían actualizando las partes incorrectas de sus ventanas en Windows 3.1. [5] - Una banda gráfica y usa escapes de impresión.
- Este es el bit # 2 de la palabra de bits de compatibilidad, con valor hexadecimal
0x4
, conocido por el nombre simbólicoGACF_ONELANDGRXBAND
en windows.h . Este indicador hace que Windows 3.1 utilice una única banda gráfica 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] - Restar hermanos de clip
- Este es el bit # 14 de la palabra de bits de compatibilidad, con valor hexadecimal
0x4000
, conocido por el nombre simbólicoGACF_SUBTRACTCLIPSIBS
en windows.h . Este indicador hace que Windows 3.1 maneje la invalidación de ventanas de manera diferente para las ventanas de nivel superior que no tienen elWS_CLIPSIBLINGS
estilo de ventana establecido y sus ventanas secundarias. (En otras palabras: afecta los cuadros de diálogo y los controles en ellos). Con el indicador establecido, Windows no invalidaría las ventanas secundarias hermanas debajo (en el orden z ) de otrasWS_CLIPSIBLINGS
ventanas secundarias. La razón principal de la bandera fueron aplicaciones como Lotus Notes 2.1, que implementó sus propios cuadros combinados como ventanas secundarias, en lugar de ventanas de nivel superior (la implementación del cuadro combinado predeterminado del sistema). Con esta bandera activada, desaparecerían los problemas de visualización extraños con tales ventanas. [5] - Admite múltiples bandas de impresión
- Este es el bit # 5 de la palabra de bits de compatibilidad, con valor hexadecimal
0x20
, conocido por el nombre simbólicoGACF_MULTIPLEBANDS
en windows.h . Este indicador hace que Windows 3.1 utilice siempre varias bandas para imprimir, incluso cuando una banda sería suficiente. Esto fue para solucionar un problema en Freelance Graphics, que supondría que si solo existiera una banda, y fuera la página completa, sería la banda de texto y ni siquiera intentaría imprimir gráficos. En Windows 3.1, el controlador de impresora universal a veces podría manejar texto y gráficos con una sola banda. Al forzar el uso de múltiples bandas, se evitaron los problemas que esto causaría a Freelance Graphics. [5] - Las fuentes TT son fuentes de dispositivo
- Este es el bit # 4 de la palabra de bits de compatibilidad, con valor hexadecimal
0x10
, conocido por el nombre simbólicoGACF_CALLTTDEVICE
en windows.h . Este indicador hace que Windows 3.1 establezca siempre elDEVICE_FONTTYPE
indicador en cualquier fuente TrueType enumerada mediante laEnumFont()
API de Windows . Esto fue para solucionar un problema con aplicaciones que incluían AmiPro y WordPerfect, las cuales asumían que todas las fuentes TrueType disponibles en una impresora residirían en el dispositivo. [5] - Comportamiento de la paleta de Windows 3.1
Banderas adicionales
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 no asignados nombres de constantes simbólicas en windows.h , que son el resto de las opciones accesibles a través del menú "Opciones avanzadas" en Hacer compatible: [6]
- Deshabilitar la caché de pincel de 16 colores y el temporizador de 55 ms
- Este es el bit # 29 de la palabra de bits de compatibilidad, con valor hexadecimal
0x20000000
. - Deshabilitar la cola de EMF
- Este es el bit # 26 de la palabra de bits de compatibilidad, con valor hexadecimal
0x4000000
. - Deshabilitar asociaciones de fuentes
- Este es el bit # 24 de la palabra de bits de compatibilidad, con valor hexadecimal
0x1000000
. - No adjunte hilo de entrada al escribir en un diario,
SetActiveWindow
==SetForeGroundWindow
- Este es el bit # 28 de la palabra de bits de compatibilidad, con valor hexadecimal
0x10000000
. - No apague / ignore ciertas fallas / elimine la línea de comando
- Este es el bit # 25 de la palabra de bits de compatibilidad, con valor hexadecimal
0x2000000
. - Habilitar las funciones de la interfaz de usuario 3.x
- Este es el bit # 27 de la palabra de bits de compatibilidad, con valor hexadecimal
0x8000000
. - Forzar el tamaño del modo de desarrollo de la impresora Win31
- Este es el bit # 23 de la palabra de bits de compatibilidad, con valor hexadecimal
0x800000
. - Aumentar el tamaño de la pila
- Este es el bit # 22 de la palabra de bits de compatibilidad, con valor hexadecimal
0x400000
. - Miente sobre los límites de los dispositivos / sin
SetDIBits
validación - Este es el bit # 20 de la palabra de bits de compatibilidad, con valor hexadecimal
0x100000
. - Miente sobre la versión de Windows
- Este es el bit # 21 de la palabra de bits de compatibilidad, con valor hexadecimal
0x200000
. - Reflejar fuentes en win.ini
- Este es el bit # 30 de la palabra de bits de compatibilidad, con valor hexadecimal
0x40000000
.
Referencias
- ^ a b c d e f g h Tim O'Reilly; Troy Mott y Walter J. Glenn (1999). "Hacer compatible" . Windows 98 en pocas palabras . O'Reilly. págs. 227–228 . ISBN 978-1-56592-486-4.
- ^ Charles J. Brooks (2002). Certificación A +: (Exámenes 220-221, 220-222) (4 ed.). What. págs. 799 . ISBN 978-0-7897-2844-9.
- ^ a b c Ron Petrusha (1 de agosto de 1999). "¿Dónde estoy corriendo?" . windowsdevcenter.com . O'Reilly Media, Inc.
- ^ a b c Ed Bott y Woody Leonhard. "Ejecución de aplicaciones más antiguas" . 95 Sólo secretos indocumentados . Empresa editorial Ziff-Davis.
- ^ a b c d e f g h i j k l m n o p q r s Andrew Schulman; David Maxey y Matt Pietrek (1992). "KERNEL: servicios del sistema de Windows" . Ventanas indocumentadas . Addison-Wesley. págs. 244–250 . ISBN 0-201-60834-0.
- ^ Rick Coogle. "Hacks de compatibilidad de programas de 16 bits de Windows" . Archivado desde el original el 2 de septiembre de 2007 . Consultado el 10 de febrero de 2009 . Cite journal requiere
|journal=
( ayuda )
Otras lecturas
- Kit de recursos de Microsoft Windows 95 . Microsoft Press. 1995, págs. 718 y siguientes. ISBN 978-1-55615-678-6.
- "MKCOMPAT hace que los programas antiguos se comporten" . Computación inteligente . 8 (7). Compañía Editorial Sandhills. Julio de 1997.
- "Cómo utilizar Mkcompat.exe para programas basados en Windows 3.1" . Microsoft KnowledgeBase . 1.2. Microsoft . 20 de enero de 2007. KBID 173086.
- "La sección WIN.INI [Compatibilidad]" . Microsoft KnowledgeBase . 1.0. Microsoft . 25 de diciembre de 2000. KBID 82860.
código> 0x20000000