Сделать совместимым

редактировать

Make Compatible - это программа, разработанная Microsoft, которая входит в состав операционных систем Windows 9x. Он изменяет системные настройки каждой программы в Windows, чтобы программы Windows 3.1, специально адаптированные для этой платформы, могли выполняться в более новых версиях. Имя файла образа программы для Make Compatible - mkcompat.exe, и он хранится в каталоге \ Windows \ System.

СОДЕРЖАНИЕ
  • 1 Параметры
  • 2 Биты совместимости
  • 3 Флаги расширенного режима
  • 4 Дополнительные флаги
  • 5 Рекомендации
  • 6 дальнейшее чтение
Параметры

Когда он вызывается, можно выбрать имя файла образа приложения Windows 3.1, используя опцию «Выбрать программу» в меню «Файл». После выбора файла образа программы в разделе «Сделать совместимым» по умолчанию отображается список из пяти параметров, которые можно настроить для изменения поведения Windows для этой программы при ее запуске:

  • Не копируйте в расширенные мета-файлы
  • Дайте приложению больше места в стеке
  • Ложь о размере режима принтера
  • Ложь о номере версии Windows
  • Элементы управления в стиле Windows 3.1

Режим расширенных параметров, выбираемый с помощью пункта «Дополнительные параметры» в меню «Файл», представляет собой более длинный список параметров, позволяющий более точно управлять эмуляцией Windows 3.1, если этого требует конкретное приложение.

Биты совместимости

Каждый из вариантов записывается в системную базу данных так называемых «битов совместимости». Это база данных 1-битных флагов, по одному для каждой из опций, отображаемых функцией Make Compatible.

Эта база данных уже существовала в более ранних версиях Windows. В Windows 3.1, база данных хранится в [Совместимость] раздел win.ini, с элементами, такими как:

[Compatibility] ACAD=0x8000 AMIPRO=0x04000010

Каждая строка называет прикладную программу и дает шестнадцатеричную числовую константу для связи с этой программой. Шестнадцатеричная числовая константа кодирует битовые флаги совместимости для этого конкретного приложения, которые Windows применяет при выполнении приложения. Make Compatible просто предоставляет графический пользовательский интерфейс для удобного редактирования этих флагов, вместо того, чтобы редактировать win.ini вручную с помощью текстового редактора. Это позволяет устанавливать и снимать отдельные флаги, не зная их числовых значений.

Битовые флаги совместимости, устанавливаемые в win.ini, не задокументированы в файле WININI.WRI, который поставляется с Windows 3.1, или в Microsoft Windows 3.1 Resource Kit, опубликованном Microsoft. Они перечислены как простой набор определенных констант (с именами, начинающимися с «GACF_» для «GetAppCompatFlags») без объяснения причин в заголовочном файле windows.h, который входит в комплект разработчика драйверов устройств Microsoft Windows 3.1. В Windows 3.1 флаги совместимости, действующие для любой данной задачи в базе данных задач ядра, доступны для чтения с помощью недокументированной функции, которая экспортируется из модуля KERNEL. GetAppCompatFlags()

Флаги расширенного режима
Дополнительные параметры MkCompat (сделать совместимыми)

Флаги описаны в статье базы знаний Майкрософт № 82860. Они соответствуют флагам «расширенного режима», которые устанавливаются в меню «Дополнительные параметры» Make Compatible:

30 показателей средней ширины
Это 19-й бит слова битов совместимости с шестнадцатеричным значением 0x80000, известным под символическим именем GACF_30AVGWIDTH в windows.h. Этот флаг заставляет Windows повторно масштабировать все шрифты с коэффициентом при вычислении их средней ширины символов. Причина этого в том, что одно конкретное приложение Windows 3.0, TurboTax, жестко закодировало значения, которые оно использовало для таких вычислений размера, что не могло корректно работать с новым методом расчета средней ширины шрифта, совместимым с TrueType, используемым в Windows 3.1. Это помешало людям использовать TurboTax для печати форм декларации о доходах на принтерах PostScript. 7 / 8 {\ displaystyle 7/8}
Всегда отправлять NC_Paint
Это шестой бит слова битов совместимости с шестнадцатеричным значением 0x40, известным под символическим именем GACF_ALWAYSSENDNCPAINT в windows.h. Этот флаг заставляет любой вызов SetWindowPos() вызывать отправку WM_NCPAINT сообщения всем дочерним окнам. Это поведение Windows 3.0. В Windows 3.1 поведение было изменено таким образом, что сообщение об окне отправляется только тем окнам, которым необходимо перекрашивать неклиентские области. Однако некоторые приложения Windows 3.0 полагались на постоянное получение этого сообщения, чтобы определить, нужно ли переставлять дочерние окна.
Не перечислять шрифты устройства
Это бит # 14 слова битов совместимости с шестнадцатеричным значением 0x2000, известным под символическим именем GACF_ENUMTTNOTDEVICE в windows.h. Этот флаг заставляет Windows 3.1 DEVICE_FONTTYPE отключать флаг в определенных обстоятельствах, когда приложение, которое хочет распечатать, перечисляет шрифты. Особые обстоятельства заключаются в том, что целевой принтер не является точечно-матричным принтером или принтером PostScript, а шрифты являются шрифтами TrueType, которые не являются резидентными в самом принтере. В таких обстоятельствах некоторые приложения (включая PageMaker и MGXDraw ) неверно интерпретируют флаг и считают шрифт резидентным на устройстве. (Шрифты TrueType могут быть загружены Windows на принтеры, и для их использования не обязательно быть резидентными на самом устройстве.) Затем они запрашивают принтер, чтобы узнать, какие размеры шрифта он поддерживает, и когда это не удается (поскольку принтер не работает) не знают о шрифте, пока он не загружен), они ошибочно предполагают, что размер шрифта изменить нельзя. Установка DEVICE_FONTTYPE флага в значение false в таких ситуациях предотвращает неправильную работу приложений, и это то, что делает этот битовый флаг совместимости.
Не отправляйте кальсайз WM_MOVE
Это 17-й бит слова битов совместимости с шестнадцатеричным значением 0x20000, известным под символическим именем GACF_NCCALCSIZEONMOVE в windows.h. Этот флаг заставляет WM_NCCALCSIZE отправить сообщение в окно, которое перемещается или изменяется. Это поведение Windows 3.0. В Windows 3.1 поведение было изменено, так что сообщение об окне отправляется только в те окна, размер которых был изменен. Он не отправлялся, если окно просто перемещалось. Однако некоторые приложения Windows 3.0, такие как Lotus Notes, например, полагались на постоянное получение этого сообщения.
Шрифты Enum Helv и Times Roman
Это бит №12 слова битов совместимости с шестнадцатеричным значением 0x1000, известным под символическим именем GACF_ENUMHELVNTMSRMN в windows.h. Этот флаг устраняет проблему с приложениями, которые отказывались работать должным образом, если только шрифты с точными именами «Helv» и «Tms Rmn» не были указаны как присутствующие в системе API перечисления шрифтов Windows. Названия являются товарными знаками компании Linotype для определенных шрифтов, Helvetica и Times Roman, и, поскольку Microsoft не поставляла эти шрифты Linotype с Windows 3.1, она не могла перечислить их как присутствующие. Этот флаг заставляет Windows перечислять шрифты «MS Sans Serif» и «MS Serif» под именами «Helv» и «Tms Rmn» для совместимости с приложениями, которые не работают без использования этих точных имен.
Форсировать дополнительные слова окна
Это 8-й бит слова битов совместимости с шестнадцатеричным значением 0x100, известным под символическим именем GACF_MOREEXTRAWNDWORDS в windows.h. Этот флаг работает для решения проблемы с приложениями, которые предполагали существование оконных слов (дополнительных элементов данных, связанных Windows с окнами графического интерфейса), когда они фактически не информировали Windows о необходимости дополнительных оконных слов. Windows 3.1, в отличие от Windows 3.0, ограничивает все случаи использования дополнительных оконных слов, и приложения, которые предполагали, что могут использовать больше места, чем они запрашивали, таким образом терпят неудачу. Для приложений, запускаемых с этим флагом, Windows 3.1 незаметно увеличила общее количество слов, запрашиваемых приложением, на дополнительные 4 байта.
Принудительно перенести текст на новый диапазон
Это бит №1 слова битов совместимости с шестнадцатеричным значением 0x2, известным под символическим именем GACF_FORCETEXTBAND в windows.h. Этот флаг заставляет Windows 3.1 всегда использовать два канала при печати: первый для графики, а второй для текста. Обычно Windows 3.1 пытается распечатать и то, и другое в одной полосе. Но такие приложения, как WordPerfect, предполагали, что второй бэнд всегда будет существовать и всегда будет там, где находится текст, как это было в Windows 3.0. У Freelance Graphics была похожая проблема.
Принудительно использовать шрифты TT для графической полосы
Это 15-й бит слова битов совместимости с шестнадцатеричным значением 0x8000, известным под символическим именем GACF_FORCETTGRAPHICS в windows.h. Этот флаг должен был обойти проблему с Freelance Graphics, когда она не могла печатать с использованием шрифтов TrueType, если они не были напечатаны как графика.
Глобальные хуки вызываются только для приложений Win16
Игнорировать атрибуты отбрасываемых сегментов
Это бит №0 слова битов совместимости с шестнадцатеричным значением 0x1, известным под символическим именем GACF_IGNORENODISCARD в windows.h. Этот флаг заставляет игнорировать GEM_NODISCARD флаг, переданный GlobalAlloc() программой. Он работал с ошибкой в ​​библиотеке времени выполнения, поставляемой с собственным компилятором C Microsoft, Microsoft C версии 6. Библиотека времени выполнения ошибочно устанавливала этот флаг при вызовах GlobalAlloc(), и любое приложение, скомпилированное с помощью этого компилятора, таким образом демонстрировало поведение.
Игнорировать растровые шрифты
Это бит №9 слова битов совместимости с шестнадцатеричным значением 0x200, известным под символическим именем GACF_TTIGNORERASTERDUPE в windows.h. Этот флаг предотвращает перечисление шрифтов одного размера как растровых, так и шрифтов TrueType. Это произошло из-за того, что несколько приложений, включая WordPerfect и Visual Basic, не смогли правильно обработать эту конкретную ситуацию.
Игнорировать самые верхние окна
Это бит №3 слова битов совместимости с шестнадцатеричным значением 0x8, известным под символическим именем GACF_IGNORETOPMOST в windows.h. Этот флаг устраняет конкретную проблему cc: Mail, которая вызвала сбой в Windows 3.1. Предполагалось, что доступ к первому окну с помощью GetWindow(HWND,GW_HWND_FIRST) вернет ему окно приложения, с которого оно только что запустилось WinExec(). Но в Windows 3.1, в которой появилась идея «самых верхних» окон, это уже не так. Флаг заставлял Windows 3.1 пропускать самые верхние окна при выполнении этого конкретного запроса API.
Взлом для конкретного модуля
Нет HRGN 1
Это бит # 16 слова битов совместимости с шестнадцатеричным значением 0x10000, известным под символическим именем GACF_NOHRGN1 в windows.h. Этот флаг восстанавливает ошибку, существовавшую в Windows 3.0, которая была исправлена ​​в Windows 3.1. Это произошло потому, что некоторые приложения, такие как Microsoft Draw, сами работали над ошибкой и перестали работать правильно, когда ошибка была устранена. Ошибка заключалась в ошибке в возвращаемом значении GetUpdateRect() функции, в результате чего в определенных ситуациях (когда все окно было недопустимым) она возвращала координаты прямоугольника обновления в координатах окна, а не в логических координатах, как предполагалось. В Windows 3.1 он всегда возвращал прямоугольник обновления в логических координатах. Приложения, которые работали с ошибкой, сами выполняли преобразование координат, чтобы обойти ошибку, и в конечном итоге обновляли неправильные части своих окон в Windows 3.1.
Одна графическая полоса и побеги для печати
Это бит №2 слова битов совместимости с шестнадцатеричным значением 0x4, известным под символическим именем GACF_ONELANDGRXBAND в windows.h. Этот флаг заставляет Windows 3.1 использовать одну полосу графики при печати в ландшафтном режиме, потребляя столько памяти, сколько необходимо для этой полосы, и отбрасывая все содержимое, которое не помещается в полосу.
Вычесть братьев и сестер клипа
Это бит # 14 слова битов совместимости с шестнадцатеричным значением 0x4000, известным под символическим именем GACF_SUBTRACTCLIPSIBS в windows.h. Этот флаг заставляет Windows 3.1 обрабатывать аннулирование окон по-разному для окон верхнего уровня, для которых не установлен WS_CLIPSIBLINGS стиль окна, и для их дочерних окон. (Другими словами: это влияет на диалоговые окна и элементы управления на них.) Если установлен флаг, Windows не будет аннулировать дочерние окна, расположенные ниже (в z-порядке ) других WS_CLIPSIBLINGS дочерних окон. Основной причиной установки флага были такие приложения, как Lotus Notes 2.1, которые реализовали свои собственные поля со списком как дочерние окна, а не как окна верхнего уровня (реализация поля со списком по умолчанию в системе). Если этот флаг установлен, нечетные проблемы с отображением в таких окнах исчезнут.
Поддержка нескольких полос печати
Это бит №5 слова битов совместимости с шестнадцатеричным значением 0x20, известным под символическим именем GACF_MULTIPLEBANDS в windows.h. Этот флаг заставляет Windows 3.1 всегда использовать несколько полос для печати, даже если одной полосы будет достаточно. Это должно было обойти проблему в Freelance Graphics, которая предполагала, что если бы существовала только одна полоса, и это была бы вся страница, это была бы текстовая полоса, и даже не пыталась бы печатать графику. В Windows 3.1 универсальный драйвер принтера иногда может обрабатывать как текст, так и графику с помощью одной полосы. Принудительное использование нескольких диапазонов позволило избежать проблем, которые это могло вызвать для Freelance Graphics.
Шрифты TT - это шрифты устройства
Это бит №4 слова битов совместимости с шестнадцатеричным значением 0x10, известным под символическим именем GACF_CALLTTDEVICE в windows.h. Этот флаг заставляет Windows 3.1 всегда устанавливать DEVICE_FONTTYPE флаг для любых шрифтов TrueType, перечисленных с помощью Windows EnumFont() API. Это должно было исправить проблему с приложениями, включая AmiPro и WordPerfect, оба из которых предполагали, что все шрифты TrueType, доступные на принтере, будут резидентными.
Поведение палитры Windows 3.1
Дополнительные флаги

Windows 3.1 определила 20 флагов совместимости приложений. Windows 95 и 98 определили еще 11 флагов, не задокументированных в статье базы знаний и им не присвоенных символьных имен констант в windows.h, которые представляют собой остальные параметры, доступные через меню «Дополнительные параметры» в разделе «Сделать совместимым»:

Отключить кэш 16 цветных кистей и таймер 55 мс
Это бит # 29 слова битов совместимости с шестнадцатеричным значением 0x20000000.
Отключить намотку EMF
Это бит # 26 слова битов совместимости с шестнадцатеричным значением 0x4000000.
Отключить ассоциации шрифтов
Это бит №24 слова битов совместимости с шестнадцатеричным значением 0x1000000.
Не прикрепляйте поток ввода при SetActiveWindow ведении журнала, == SetForeGroundWindow
Это бит # 28 слова битов совместимости с шестнадцатеричным значением 0x10000000.
Не выключать / игнорировать определенные ошибки / отменять кавычки в командной строке
Это бит №25 слова битов совместимости с шестнадцатеричным значением 0x2000000.
Включить функции пользовательского интерфейса 3.x
Это бит # 27 слова битов совместимости с шестнадцатеричным значением 0x8000000.
Принудительный размер режима разработчика принтера Win31
Это 23-й бит слова битов совместимости с шестнадцатеричным значением 0x800000.
Увеличить размер стека
Это 22-й бит слова битов совместимости с шестнадцатеричным значением 0x400000.
Ложь о крышках устройства / без SetDIBits проверки
Это 20-й бит слова битов совместимости с шестнадцатеричным значением 0x100000.
Ложь о версии для Windows
Это 21-й бит слова битов совместимости с шестнадцатеричным значением 0x200000.
Зеркальное отображение шрифтов в win.ini
Это бит №30 слова битов совместимости с шестнадцатеричным значением 0x40000000.
Рекомендации
дальнейшее чтение

кодgt; 0x20000000

Последняя правка сделана 2024-01-01 03:33:45
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте