Zajistěte kompatibilitu - Make Compatible

Zajistěte kompatibilitu je program vyvinutý společností Microsoft který je součástí Windows 9x operační systémy. Změní nastavení systému podle programu v systému Windows, aby to bylo možné Windows 3.1 programy, které jsou speciálně přizpůsobeny této platformě, aby se spouštěly v novějších verzích. Název obrazového souboru programu pro Make Compatible je mkcompat.exea je uložen v souboru Windows System adresář.[1][2]

Možnosti

Když je vyvolán, lze zvolit název obrazového souboru aplikačního programu Windows 3.1 pomocí možnosti „Vybrat program“ v nabídce „Soubor“. Poté, co vyberete soubor s obrázkem programu, zobrazí se ve výchozím nastavení Make Compatible seznam pěti možností, které lze nastavit a změnit chování systému Windows při spuštění tohoto programu:[1]

  • Nespouštějte na vylepšené meta soubory[1]
  • Poskytněte aplikaci více místa v zásobníku[1]
  • Lež o velikosti režimu tiskového zařízení[1]
  • Lež o čísle verze Windows[1]
  • Ovládací prvky ve stylu Windows 3.1[1]

Režim pokročilých možností, který lze vybrat pomocí nabídky „Rozšířené možnosti“ v nabídce „Soubor“, představuje delší seznam možností, který umožňuje jemnější kontrolu emulace systému Windows 3.1, pokud to konkrétní aplikace vyžaduje.[1]

Bity kompatibility

Každá z možností je zaznamenána v systémové databázi takzvaných „kompatibilních bitů“. Toto je databáze 1bitových příznaků, jeden pro každou z možností zobrazených pomocí Make Compatible.[3][4]

Tato databáze již existovala v dřívějších verzích systému Windows. Ve Windows 3.1 je databáze uložena v [Kompatibilita] část win.ini, s položkami jako:[3][4]

[Kompatibilita]ACAD=0x8000AMIPRO=0x04000010

Každý řádek pojmenuje aplikační program a dá hexadecimální číselnou konstantu, která se k tomuto programu přidruží. Hexadecimální číselná konstanta kóduje bitové příznaky kompatibility pro konkrétní aplikaci, které Windows použije při spuštění aplikace. Make Compatible pouze poskytuje a grafické uživatelské prostředí pro úpravy těchto příznaků snadným způsobem, spíše než úpravy win.ini ručně pomocí textového editoru. Umožňuje nastavit a deaktivovat jednotlivé příznaky bez nutnosti znát jejich číselné hodnoty.[3][4]

Nastavitelné bitové příznaky kompatibility v win.ini nejsou dokumentovány v WININI.WRI soubor dodávaný se systémem Windows 3.1 nebo v souboru Microsoft Windows 3.1 Resource Kit publikováno společností Microsoft. Jsou uvedeny jako jednoduchá sada definovaných konstant (se jmény začínajícími na „GACF_“ pro „GetAppCompatFlags“), bez vysvětlení, v windows.h hlavičkový soubor dodávaný s vývojovou sadou ovladačů zařízení Microsoft Windows 3.1. V systému Windows 3.1 jsou příznaky kompatibility, které platí pro jakýkoli daný úkol v databázi úloh jádra, čitelné prostřednictvím nezdokumentovaného GetAppCompatFlags () funkce, která je exportována z JÁDRO modul.[5]

Příznaky pokročilého režimu

Pokročilé možnosti MkCompat (Make Compatible)

Příznaky jsou popsány v článku Microsoft KnowledgeBase # 82860. Odpovídají příznakům „pokročilého režimu“, které lze nastavit pomocí nabídky „Advanced Options“ programu Make Compatible:[5]

30 metrik průměrné šířky
Toto je bit # 19 slova kompatibility bitů s hexadecimální hodnotou 0x80000, známý pod symbolickým názvem GACF_30AVGWIDTH v windows.h. Tento příznak způsobí, že Windows změní měřítko všech písem o faktor při výpočtu jejich průměrné šířky znaků. Důvodem je to, že jedna konkrétní aplikace Windows 3.0, TurboTax, pevně zakódoval hodnoty, které používal pro takové výpočty velikosti, které s novým selhaly správně TrueType -kompatibilní metoda výpočtu průměrné šířky písma použitá v systému Windows 3.1. To zabraňovalo lidem v používání TurboTaxu k tisku jejich daň z příjmu návratové formuláře PostScript tiskaři.[5]
Vždy pošlete NC_Paint
Toto je bit # 6 slova kompatibility bitů s hexadecimální hodnotou 0x40, známý pod symbolickým názvem GACF_ALWAYSSENDNCPAINT v windows.h. Tento příznak vynutí jakékoli volání SetWindowPos () způsobit odeslání WM_NCPAINT zpráva do všech podřízených oken. Toto je chování systému Windows 3.0. V systému Windows 3.1 bylo chování změněno tak, aby se okenní zpráva odesílala pouze do těch oken, která vyžadují překreslení svých neklientských oblastí. Některé aplikace systému Windows 3.0 však spoléhaly na to, že vždy obdrží tuto zprávu, aby určily, zda je nutné podřízené okno přemístit.[5]
Nezahrnujte písma zařízení
Toto je bit č. 14 slova kompatibility bitů s hexadecimální hodnotou 0x2000, známý pod symbolickým názvem GACF_ENUMTTNOTDEVICE v windows.h. Tento příznak způsobí, že Windows 3.1 otočí DEVICE_FONTTYPE označte za určitých okolností, když aplikace, která chce tisknout, vyjmenovává písma. Konkrétní okolnosti jsou, když cílová tiskárna není a Jehličková tiskárna nebo PostScriptová tiskárna a písma jsou písma TrueType, která nejsou rezidenty v samotné tiskárně. Za takových okolností mohou některé aplikace (včetně PageMaker a MGXDraw ) misinterpret the flag and believe the font to be device-resident. (Písma TrueType lze do systému Windows nahrát do tiskáren a nemusí být rezidentní na samotném zařízení, aby byla použitelná.) Poté dotazují tiskárnu, aby zjistili, jaké velikosti písma podporuje, a kdy se to nepodaří (protože tiskárna není Nevíme o písmu, dokud není nahráno), nesprávně předpokládají, že velikost písma nelze změnit. Nastavení DEVICE_FONTTYPE flag na false v takových situacích zabrání chybným aplikacím, a to je to, co tato kompatibilita bitflag dělá.[5]
Neposílejte kalkulaci WM_MOVE
Toto je bit # 17 slova kompatibility bitů s hexadecimální hodnotou 0x20000, známý pod symbolickým názvem GACF_NCCALCSIZEONMOVE v windows.h. Tato vlajka nutí WM_NCCALCSIZE zpráva, která má být odeslána do okna, které se přesouvá nebo mění jeho velikost. Toto je chování systému Windows 3.0. V systému Windows 3.1 bylo chování změněno tak, aby se okenní zpráva odesílala pouze do těch oken, u kterých byla změněna velikost. Nebylo odesláno, pokud bylo okno pouze pohnuto. Některé aplikace Windows 3.0, například, jako Lotus Notes například se spoléhal na to, že tuto zprávu vždy obdrží.[5]
Enum Helv a Times Roman písma
Toto je bit # 12 slova kompatibility bitů s hexadecimální hodnotou 0x1000, známý pod symbolickým názvem GACF_ENUMHELVNTMSRMN v windows.h. Tento příznak obchází problém s aplikacemi, které odmítly pracovat správně, pokud v systému Windows pomocí výčtu písem Windows nejsou uvedena písma s přesnými názvy „Helv“ a „Tms Rmn“ jako přítomná. Názvy jsou ochranné známky společnosti Linotypová společnost pro konkrétní písma, Helvetica a Times Roman, a protože společnost Microsoft nedodala tato písma Linotype se systémem Windows 3.1, nemohla je vyjmenovat jako přítomná. Tento příznak způsobí, že Windows vyčíslí písma „MS Sans Serif“ a „MS Serif“ pod názvy „Helv“ a „Tms Rmn“, aby byla zajištěna kompatibilita s aplikacemi, které nefungují bez použití těchto přesných názvů.[5]
Vynutit další slova v systému Windows
Toto je bit # 8 slova kompatibility bitů s hexadecimální hodnotou 0x100, známý pod symbolickým názvem GACF_MOREEXTRAWNDWORDS v windows.h. Tento příznak obchází problém s aplikacemi, které předpokládaly existenci okenních slov (další položky dat přidružené Windows k Windows GUI), když ve skutečnosti neinformovaly Windows, že jsou vyžadována další okenní slova. Windows 3.1, na rozdíl od Windows 3.0, hranice kontroly všechna použití dalších okenních slov a aplikace, které předpokládaly, že by mohly využívat více místa, než o které žádaly, by tedy selhaly. U aplikací spuštěných s touto sadou příznaků Windows 3.1 bezobslužně zvýšil celkový počet slov požadovaných aplikací o další 4 bajty.[5]
Vynutit tisk textu do nového pásma
Toto je bit č. 1 slova bitů kompatibility s hexadecimální hodnotou 0x2, známý pod symbolickým názvem GACF_FORCETEXTBAND v windows.h. Tento příznak způsobí, že Windows 3.1 při tisku vždy používá dvě pásma, první pro grafiku a druhé pro text. Normálně se Windows 3.1 pokouší tisknout oba v jednom pásmu. Ale aplikace jako WordPerfect předpokládaly, že vždy bude existovat druhé pásmo a vždy bude tam, kde byl text, jako tomu bylo v případě Windows 3.0. Grafika na volné noze měla podobný problém.[5]
Vynutit písma TT na grafické pásmo
Toto je bit # 15 slova kompatibility bitů s hexadecimální hodnotou 0x8000, známý pod symbolickým názvem GACF_FORCETTGRAPHICS v windows.h. Tento příznak měl vyřešit problém s Grafika na volné noze, kde by se netisklo pomocí písem TrueType, pokud by nebyly vytištěny jako grafika.[5]
Globální háčky požadovaly pouze aplikace Win16
Ignorujte atributy segmentu, které nelze použít
Toto je bit # 0 slova kompatibility bitů s hexadecimální hodnotou 0x1, známý pod symbolickým názvem GACF_IGNORENODISCARD v windows.h. Tato vlajka nutí GEM_NODISCARD vlajka předána GlobalAlloc () programem, který má být ignorován. Vyřešilo to chybu v knihovně run-time dodávané s vlastní Microsoft C překladač, Microsoft C. verze 6. Knihovna run-time by chybně nastavila tento příznak ve voláních GlobalAlloc ()a jakákoli aplikace kompilovaná s tímto kompilátorem by tedy vykazovala chování.[5]
Ignorovat rastrová písma
Toto je bit č. 9 slova bitů kompatibility s hexadecimální hodnotou 0x200, známý pod symbolickým názvem GACF_TTIGNORERASTERDUPE v windows.h. Tento příznak zabrání výčtu písem stejné velikosti jako u bitmapových i TrueType písem. Důvodem bylo několik aplikací, včetně WordPerfect a Visual Basic nebyli schopni tuto konkrétní situaci zvládnout správně.[5]
Ignorovat nejvyšší okna
Toto je bit # 3 slova kompatibility bitů s hexadecimální hodnotou 0x8, známý pod symbolickým názvem GACF_IGNORETOPMOST v windows.h. Tento příznak opravuje konkrétní problém s cc: Mail což způsobilo jeho selhání v systému Windows 3.1. Předpokládalo se, že přístup k prvnímu oknu pomocí GetWindow (HWND, GW_HWND_FIRST) vrátilo by to okno aplikace, se kterou právě začalo WinExec (). Ale ve Windows 3.1, který představil myšlenku „nejvyšších“ oken, to už nebyla pravda. Příznak způsobil, že Windows 3.1 přeskočil nejvyšší okna, když byl zadán konkrétní požadavek API.[5]
Hack pro konkrétní modul
Žádný HRGN 1
Toto je bit # 16 slova bitů kompatibility s hexadecimální hodnotou 0x10000, známý pod symbolickým názvem GACF_NOHRGN1 v windows.h. Tento příznak obnovuje chybu, která existovala v systému Windows 3.0, která byla opravena v systému Windows 3.1. Udělalo to proto, že několik aplikací, jako např Microsoft Draw, pracovali kolem chyby sami, a nepodařilo by se jim správně fungovat, kdyby byla chyba odstraněna. Chyba byla chyba v návratové hodnotě souboru GetUpdateRect () funkce, přičemž v určitých situacích (kde bylo celé okno neplatné) by to vrátilo souřadnice v aktualizačním obdélníku v okně, místo v logických, jak se mělo. V systému Windows 3.1 vždy vracel aktualizační obdélník v logických souřadnicích. Aplikace, které tuto chybu vyřešily, by provedly koordinaci, aby se tuto chybu vyřešily, a nakonec by aktualizovaly nesprávné části svých oken v systému Windows 3.1.[5]
Jedno grafické pásmo a použití úniků tisku
Toto je bit # 2 slova kompatibility bitů s hexadecimální hodnotou 0x4, známý pod symbolickým názvem GACF_ONELANDGRXBAND v windows.h. Tento příznak způsobí, že systém Windows 3.1 při tisku použije jedno grafické pásmo Režim na šířku, spotřebovávající tolik paměti, kolik je pro dané pásmo potřeba, a odhodí veškerý obsah, který se do pásma nevejde.[5]
Odečtěte klip sourozence
Toto je bit # 14 slova kompatibility bitů s hexadecimální hodnotou 0x4000, známý pod symbolickým názvem GACF_SUBTRACTCLIPSIBS v windows.h. Tento příznak způsobí, že Windows 3.1 zpracovává zneplatnění oken odlišně pro okna nejvyšší úrovně, která nemají WS_CLIPSIBLINGS sada stylů oken a jejich podřízená okna. (Jinými slovy: Ovlivňuje dialogová okna a ovládací prvky na nich.) Se sadou příznaků by Windows nezrušil podřízená podřízená okna pod ním (v z-pořadí ) jiný WS_CLIPSIBLINGS dětská okna. Hlavním důvodem pro označení byly aplikace jako Lotus Notes 2.1, které implementovaly vlastní kombinované boxy jako podřízená okna, nikoli jako okna nejvyšší úrovně (implementace výchozího pole se seznamem systému). S tímto nastaveným příznakem by problémy s lichým zobrazením u takových oken zmizely.[5]
Podpora více tiskových pásem
Toto je bit # 5 slova kompatibility bitů s hexadecimální hodnotou 0x20, známý pod symbolickým názvem GACF_MULTIPLEBANDS v windows.h. Tento příznak způsobí, že Windows 3.1 vždy používá pro tisk více pásem, i když by stačilo jedno pásmo. To mělo vyřešit problém ve Freelance Graphics, který by předpokládal, že pokud by existovalo pouze jedno pásmo a byla by to celá stránka, bylo by to pásmo textu a ani by se nepokusilo tisknout grafiku. V systému Windows 3.1 by byl univerzální ovladač tiskárny někdy schopen zpracovat text i grafiku v jednom pásmu. Vynucením používání více pásem se předešlo problémům, které by to způsobilo pro Freelance Graphics.[5]
Písma TT jsou písma zařízení
Toto je bit č. 4 slova bitů kompatibility s hexadecimální hodnotou 0x10, známý pod symbolickým názvem GACF_CALLTTDEVICE v windows.h. Tento příznak způsobí, že Windows 3.1 vždy nastaví DEVICE_FONTTYPE příznak u všech písem TrueType, které jsou vyjmenovány pomocí systému Windows EnumFont () API. To mělo vyřešit problém s aplikacemi včetně AmiPro a WordPerfect, oba předpokládali, že všechna písma TrueType dostupná na tiskárně budou rezidentní pro zařízení.[5]
Chování palety Windows 3.1

Další vlajky

Windows 3.1 definovalo 20 příznaků kompatibility aplikací.[5] Windows 95 a 98 definovaly dalších 11 příznaků, které nejsou zdokumentovány v článku znalostní báze Knowledge Base a nejsou jim přiřazeny symbolické konstantní názvy windows.h, což je zbývající část možností přístupných prostřednictvím nabídky „Pokročilé možnosti“ v Make Compatible:[6]

Zakažte mezipaměť 16 barevných štětců a časovač 55ms
Toto je bit # 29 slova kompatibility bitů s hexadecimální hodnotou 0x20000000.
Zakázat zařazování EMF
Toto je bit # 26 slova kompatibility bitů s hexadecimální hodnotou 0x4000000.
Zakázat přidružení písem
Toto je bit # 24 slova bitů kompatibility s hexadecimální hodnotou 0x1000000.
Při ukládání do deníku nepřipojujte vstupní vlákno, SetActiveWindow == SetForeGroundWindow
Toto je bit # 28 slova kompatibility bitů s hexadecimální hodnotou 0x10000000.
Nevypínejte / Ignorujte určité poruchy / dekomponujte příkazový řádek
Toto je bit # 25 slova kompatibility bitů s hexadecimální hodnotou 0x2000000.
Povolte funkce uživatelského rozhraní 3.x.
Toto je bit # 27 slova kompatibility bitů s hexadecimální hodnotou 0x8000000.
Vynutit velikost režimu dev pro tiskárnu Win31
Toto je bit # 23 slova kompatibility bitů s hexadecimální hodnotou 0x800000.
Zvětšete velikost zásobníku
Toto je bit # 22 slova kompatibility bitů s hexadecimální hodnotou 0x400000.
Lež o čepicích zařízení / č SetDIBits validace
Toto je bit # 20 slova kompatibility bitů s hexadecimální hodnotou 0x100000.
Lež o verzi Windows
Toto je bit # 21 slova kompatibility bitů s hexadecimální hodnotou 0x200000.
Zrcadlit písma v win.ini
Toto je bit # 30 slova kompatibility bitů s hexadecimální hodnotou 0x40000000.

Reference

  1. ^ A b C d E F G h Tim O'Reilly; Troy Mott a Walter J. Glenn (1999). „Make Compatible“. Windows 98 v kostce. O'Reilly. str.227–228. ISBN  978-1-56592-486-4.
  2. ^ Charles J. Brooks (2002). A + certifikace: (zkoušky 220-221, 220-222) (4. vyd.). Que. str.799. ISBN  978-0-7897-2844-9.
  3. ^ A b C Ron Petrusha (1. srpna 1999). „Kam běžím?“. windowsdevcenter.com. O'Reilly Media, Inc.
  4. ^ A b C Ed Bott a Woody Leonhard. „Spouštění starších aplikací“. 95 Pouze nezdokumentovaná tajemství. Nakladatelská společnost Ziff-Davis.
  5. ^ A b C d E F G h i j k l m n Ó p q r s Andrew Schulman; David Maxey & Matt Pietrek (1992). "KERNEL: Systémové služby Windows". Windows bez dokladů. Addison-Wesley. str.244–250. ISBN  0-201-60834-0.
  6. ^ Rick Coogle. „Hackování 16bitové kompatibility programů s Windows“. Archivovány od originál dne 2. září 2007. Citováno 10. února 2009. Citovat deník vyžaduje | deník = (Pomoc)

Další čtení

kód> 0x20000000