stringtranslate.com

Hacer compatible

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]

Opciones

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]

Bits de compatibilidad

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()

Banderas del modo avanzado

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]

30 métricas de ancho promedio
Este es el bit n.° 19 de la palabra bits de compatibilidad, con valor hexadecimal 0x80000, conocido por el nombre simbólico GACF_30AVGWIDTHen 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]
Enviar siempre NC_Paint
Este es el bit n.° 6 de la palabra bits de compatibilidad, con valor hexadecimal 0x40, conocido por el nombre simbólico GACF_ALWAYSSENDNCPAINTen 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
No enumere las fuentes del dispositivo
Este es el bit n.° 14 de la palabra bits de compatibilidad, con valor hexadecimal 0x2000, conocido por el nombre simbólico GACF_ENUMTTNOTDEVICEen 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_FONTTYPEDEVICE_FONTTYPE
No envíe calcsizeWM_MOVE
Este es el bit n.° 17 de la palabra bits de compatibilidad, con valor hexadecimal 0x20000, conocido por el nombre simbólico GACF_NCCALCSIZEONMOVEen 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
Fuentes Enum Helv y Times Roman
Este es el bit n.° 12 de la palabra bits de compatibilidad, con valor hexadecimal 0x1000, conocido por el nombre simbólico GACF_ENUMHELVNTMSRMNen 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]
Forzar palabras adicionales en Windows
Este es el bit n.° 8 de la palabra bits de compatibilidad, con valor hexadecimal 0x100, conocido por el nombre simbólico GACF_MOREEXTRAWNDWORDSen 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]
Forzar el texto de la impresora a una nueva banda
Este es el bit n.° 1 de la palabra de bits de compatibilidad, con valor hexadecimal 0x2, conocido por el nombre simbólico GACF_FORCETEXTBANDen 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]
Forzar fuentes TT a la banda gráfica
Este es el bit n.° 15 de la palabra bits de compatibilidad, con valor hexadecimal 0x8000, conocido por el nombre simbólico GACF_FORCETTGRAPHICSen 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]
Los ganchos globales solo se requieren para aplicaciones Win16
Ignorar atributos de segmentos descartables
Este es el bit n.° 0 de la palabra bits de compatibilidad, con valor hexadecimal 0x1, conocido por el nombre simbólico GACF_IGNORENODISCARDen 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_NODISCARDGlobalAlloc()GlobalAlloc()
Ignorar fuentes rasterizadas
Este es el bit n.° 9 de la palabra de bits de compatibilidad, con valor hexadecimal 0x200, conocido por el nombre simbólico GACF_TTIGNORERASTERDUPEen 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]
Ignorar las ventanas superiores
Este es el bit n.° 3 de la palabra bits de compatibilidad, con valor hexadecimal 0x8, conocido por el nombre simbólico GACF_IGNORETOPMOSTen 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()
Hack específico del módulo
No. HRGN 1
Este es el bit n.° 16 de la palabra bits de compatibilidad, con valor hexadecimal 0x10000, conocido por el nombre simbólico GACF_NOHRGN1en 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()
Una banda gráfica y uso de escapes de impresión.
Este es el bit n.° 2 de la palabra bits de compatibilidad, con valor hexadecimal 0x4, conocido por el nombre simbólico GACF_ONELANDGRXBANDen 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]
Restar clip hermanos
Este es el bit n.° 14 de la palabra bits de compatibilidad, con valor hexadecimal 0x4000, conocido por el nombre simbólico GACF_SUBTRACTCLIPSIBSen 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_CLIPSIBLINGSWS_CLIPSIBLINGS
Admite múltiples bandas de impresión
Este es el bit n.° 5 de la palabra bits de compatibilidad, con valor hexadecimal 0x20, conocido por el nombre simbólico GACF_MULTIPLEBANDSen 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]
Las fuentes TT son fuentes de dispositivo
Este es el bit n.° 4 de la palabra de bits de compatibilidad, con valor hexadecimal 0x10, conocido por el nombre simbólico GACF_CALLTTDEVICEen 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_FONTTYPEEnumFont()
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 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]

Deshabilitar el 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 el spooling EMF
Este es el bit n.° 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 el hilo de entrada al llevar un diario, SetActiveWindow==SetForeGroundWindow
Este es el bit #28 de la palabra de bits de compatibilidad, con valor hexadecimal 0x10000000.
No apagar/Ignorar ciertos fallos/eliminar comillas en la línea de comandos
Este es el bit n.° 25 de la palabra de bits de compatibilidad, con valor hexadecimal 0x2000000.
Habilitar funciones de la interfaz de usuario 3.x
Este es el bit n.° 27 de la palabra de bits de compatibilidad, con valor hexadecimal 0x8000000.
Forzar el tamaño del modo de desarrollo de impresora Win31
Este es el bit n.° 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.
Mentira sobre los límites de los dispositivos/falta de SetDIBitsvalidación
Este es el bit n.° 20 de la palabra de bits de compatibilidad, con valor hexadecimal 0x100000.
Mentira sobre la versión de Windows
Este es el bit n.° 21 de la palabra de bits de compatibilidad, con valor hexadecimal 0x200000.
Fuentes reflejadas en win.ini
Este es el bit #30 de la palabra de bits de compatibilidad, con valor hexadecimal 0x40000000.

Referencias

  1. ^ abcdefgh Tim O'Reilly; Troy Mott y Walter J. Glenn (1999). "Make Compatible". Windows 98 en pocas palabras . O'Reilly. págs. 227–228. ISBN 978-1-56592-486-4.
  2. ^ Charles J. Brooks (2002). Certificación A+: (Exámenes 220-221, 220-222) (4.ª ed.). Que. pp. 799. ISBN 978-0-7897-2844-9.
  3. ^ abc Ron Petrusha (1 de agosto de 1999). "¿Adónde voy corriendo?". windowsdevcenter.com . O'Reilly Media, Inc.
  4. ^ abc Ed Bott y Woody Leonhard. "Ejecución de aplicaciones antiguas". 95 secretos indocumentados . Ziff-Davis Publishing Company.
  5. ^ abcdefghijklmnopqrs Andrew Schulman; David Maxey y Matt Pietrek (1992). "KERNEL: servicios del sistema de Windows". Windows no documentado . Addison-Wesley. págs. 244–250. ISBN 0-201-60834-0.
  6. ^ Rick Coogle. "Trucos para la compatibilidad de programas de 16 bits en Windows". Archivado desde el original el 2 de septiembre de 2007. Consultado el 10 de febrero de 2009 . {{cite journal}}: Requiere citar revista |journal=( ayuda )

Lectura adicional