Jump to content

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

Сделать совместимым
Разработчик(и) Майкрософт
Операционная система Windows 9x

Make Compatible — это программа, разработанная Microsoft и входящая в состав Windows 9x операционных систем . Он изменяет системные настройки для каждой программы в Windows, чтобы позволить программам Windows 3.1 , специально адаптированным для этой платформы, выполняться в более новых версиях. Имя файла образа программы для Make Compatible: mkcompat.exe и хранится в папке \Windows\Система . Каталог [1] [2]

Параметры

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

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

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

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

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

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

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

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

[Compatibility]
ACAD=0x8000
AMIPRO=0x04000010

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

Битовые флаги совместимости, устанавливаемые в win.ini не документированы в Файл WININI.WRI , поставляемый с Windows 3.1 или в пакете ресурсов Microsoft Windows 3.1, опубликованном Microsoft. Они перечислены как простой набор определенных констант (с именами, начинающимися с «GACF_» вместо «GetAppCompatFlags») без объяснения причин в windows.h заголовочный файл , который поставляется с комплектом разработки драйверов устройств Microsoft Windows 3.1. В Windows 3.1 флаги совместимости, действующие для любой задачи в базе данных задач ядра, можно прочитать через недокументированный файл GetAppCompatFlags() функция, экспортированная из ЯДРА . Модуль [5]

Флаги расширенного режима

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

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

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

Дополнительные флаги

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

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

Отключить кеш 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.
  1. ^ Jump up to: а б с д и ж г час Тим О'Рейли; Трой Мотт и Уолтер Дж. Гленн (1999). «Сделать совместимым» . Коротко о Windows 98 . О'Рейли. стр. 227–228 . ISBN  978-1-56592-486-4 .
  2. ^ Чарльз Дж. Брукс (2002). Сертификация A +: (экзамены 220–221, 220–222) (4-е изд.). Que. стр. 799 . ISBN  978-0-7897-2844-9 .
  3. ^ Jump up to: а б с Рон Петруша (1 августа 1999 г.). "Куда я бегу?" . windowsdevcenter.com . О'Рейли Медиа, Инк.
  4. ^ Jump up to: а б с Эд Ботт и Вуди Леонхард. «Запуск старых приложений» . 95 Только недокументированные тайны . Издательская компания Зифф-Дэвис.
  5. ^ Jump up to: а б с д и ж г час я дж к л м н тот п д р с Эндрю Шульман; Дэвид Макси и Мэтт Питрек (1992). «ЯДРО: Системные службы Windows» . Недокументированная Windows . Аддисон-Уэсли. стр. 244–250 . ISBN  0-201-60834-0 .
  6. ^ Рик Кугл. «Советы по обеспечению совместимости 16-битных программ Windows» . Архивировано из оригинала 2 сентября 2007 года . Проверено 10 февраля 2009 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 51253ec1205205611e2ed260e0e3fb18__1703825400
URL1:https://arc.ask3.ru/arc/aa/51/18/51253ec1205205611e2ed260e0e3fb18.html
Заголовок, (Title) документа по адресу, URL1:
Make Compatible - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)