Zajistěte kompatibilitu - Make Compatible
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
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

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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_IGNORENODISCARD
v windows.h. Tato vlajka nutíGEM_NODISCARD
vlajka předánaGlobalAlloc ()
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íchGlobalAlloc ()
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ázvemGACF_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ázvemGACF_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čaloWinExec ()
. 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ázvemGACF_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ě souboruGetUpdateRect ()
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ázvemGACF_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ázvemGACF_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ázvemGACF_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ázvemGACF_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 WindowsEnumFont ()
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
- ^ 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.
- ^ Charles J. Brooks (2002). A + certifikace: (zkoušky 220-221, 220-222) (4. vyd.). Que. str.799. ISBN 978-0-7897-2844-9.
- ^ A b C Ron Petrusha (1. srpna 1999). „Kam běžím?“. windowsdevcenter.com. O'Reilly Media, Inc.
- ^ A b C Ed Bott a Woody Leonhard. „Spouštění starších aplikací“. 95 Pouze nezdokumentovaná tajemství. Nakladatelská společnost Ziff-Davis.
- ^ 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.
- ^ 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í
- Microsoft Windows 95 Resource Kit. Microsoft Press. 1995. str. 718 a násl. ISBN 978-1-55615-678-6.
- „MKCOMPAT se stará o staré programy“. Inteligentní výpočetní technika. 8 (7). Sandhills Publishing Company. Červenec 1997.
- "Jak používat program Mkcompat.exe pro programy založené na systému Windows 3.1". Microsoft KnowledgeBase. 1.2. Microsoft. 20. ledna 2007. KBID 173086.
- „Sekce [kompatibilita] WIN.INI“. Microsoft KnowledgeBase. 1.0. Microsoft. 25. prosince 2000. KBID 82860.
kód> 0x20000000