صنع متوافق

برنامج Make Compatible هو برنامج طورته شركة مايكروسوفت، وهو مُضمّن في أنظمة تشغيل ويندوز 9x . يقوم هذا البرنامج بتغيير إعدادات النظام لكل برنامج على حدة في ويندوز، مما يسمح بتشغيل برامج ويندوز 3.1 غير المتوافقة مع الإصدارات الأحدث من ويندوز. يُخزّن الملف التنفيذي لبرنامج Make Compatible في المسار C:\Windows\System\mkcompat.exe . [ 1 ] [ 2 ]

خيارات

عند تشغيله، يمكن اختيار ملف تشغيل تطبيق Windows 3.1 باستخدام خيار "اختيار برنامج" في قائمة "ملف". بعد اختيار البرنامج، يعرض خيار "جعل متوافقًا" افتراضيًا قائمة بخمسة خيارات يمكن ضبطها لتغيير سلوك Windows عند تشغيل هذا البرنامج: [ 1 ]

  • لا تقم بالتحويل إلى ملفات تعريف محسّنة [ 1 ]
  • امنح التطبيق مساحة أكبر في الذاكرة المخصصة [ 1 ]
  • الكذب بشأن حجم وضع جهاز الطابعة [ 1 ]
  • الكذب بشأن رقم إصدار ويندوز [ 1 ]
  • عناصر تحكم على غرار نظام التشغيل Windows 3.1 [ 1 ]

يُتيح وضع الخيارات المتقدمة، الذي يمكن تحديده عبر خيار "الخيارات المتقدمة" في قائمة "ملف"، قائمة أطول من الخيارات، مما يسمح بتحكم أدق في محاكاة نظام التشغيل Windows 3.1 إذا كان التطبيق المعني يتطلب ذلك. [ 1 ]

بتات التوافق

يتم تسجيل كل خيار من الخيارات في قاعدة بيانات النظام لما يُسمى "بتات التوافق". وهي قاعدة بيانات تتكون من علامات أحادية البت، واحدة لكل خيار من الخيارات التي يعرضها برنامج Make Compatible. [ 3 ] [ 4 ]

كانت قاعدة البيانات هذه موجودة بالفعل في الإصدارات السابقة من نظام التشغيل ويندوز. في ويندوز 3.1، تُخزَّن قاعدة البيانات في قسم [التوافق] من ملف win.ini ، مع إدخالات مثل: [ 3 ] [ 4 ]

[التوافق] ACAD = 0x8000 AMIPRO = 0x04000010

يُحدد كل سطر اسم برنامج تطبيقي، ويُعطي قيمة عددية سداسية عشرية لربطها بهذا البرنامج. تُشفّر هذه القيمة العددية علامات التوافق الخاصة بهذا التطبيق، والتي يُطبقها نظام ويندوز عند تشغيله. يوفر برنامج 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، يمكن قراءة علامات التوافق المُطبَّقة على أي مهمة مُحدَّدة في قاعدة بيانات مهام النواة عبر دالة غير موثقة مُصدَّرة من وحدة KERNEL . [ 5 ]GetAppCompatFlags()

علامات الوضع المتقدم

تم توثيق هذه العلامات في مقالة قاعدة معارف مايكروسوفت رقم 82860. وهي تتوافق مع علامات "الوضع المتقدم" التي يمكن ضبطها من خلال قائمة "الخيارات المتقدمة" في Make Compatible: [ 5 ]

30 مقياسًا متوسطًا للعرض
هذا هو البت رقم 19 من كلمة بتات التوافق، بقيمته السداسية العشرية 0x80000، والمعروفة بالاسم الرمزي GACF_30AVGWIDTHفي ملف windows.h . يؤدي هذا الخيار إلى قيام نظام التشغيل Windows بإعادة تحجيم جميع الخطوط بمعامل .7/8{\displaystyle 7/8}عند حساب متوسط ​​عرض الأحرف. والسبب في ذلك هو أن أحد تطبيقات ويندوز 3.0، وهو TurboTax ، كان يُضمّن قيمًا ثابتة لحسابات الحجم هذه، مما لم يتوافق مع طريقة حساب متوسط ​​عرض الخط الجديدة المتوافقة مع TrueType والمستخدمة في ويندوز 3.1. وقد منع هذا المستخدمين من استخدام TurboTax لطباعة نماذج إقرارات ضريبة الدخل على طابعات PostScript . [ 5 ]
أرسل دائمًا NC_Paint
هذا هو البت رقم 6 من كلمة بتات التوافق، وقيمته سداسية عشرية 0x40، ويُعرف بالاسم الرمزي GACF_ALWAYSSENDNCPAINTفي ملف windows.h . يُجبر هذا الخيار أي استدعاء للدالة على إرسال رسالة إلى جميع النوافذ الفرعية. هذا هو سلوك نظام التشغيل Windows 3.0. في Windows 3.1، تم تغيير السلوك بحيث تُرسل رسالة النافذة فقط إلى النوافذ التي تحتاج إلى إعادة رسم مناطقها غير المخصصة للعميل. مع ذلك، اعتمدت بعض تطبيقات Windows 3.0 على تلقي هذه الرسالة دائمًا لتحديد ما إذا كانت النوافذ الفرعية بحاجة إلى إعادة تموضع. [ 5 ]SetWindowPos()WM_NCPAINT
لا تقم بتعداد خطوط الجهاز
هذا هو البت رقم 14 من كلمة بتات التوافق، بقيمته الست عشرية 0x2000، والمعروفة باسمه الرمزي GACF_ENUMTTNOTDEVICEفي ملف windows.h . يؤدي هذا الخيار إلى تعطيل نظام التشغيل Windows 3.1 في ظروف معينة عندما يقوم تطبيقٌ ما، يرغب في الطباعة، بحصر الخطوط. وتتمثل هذه الظروف في أن الطابعة المستهدفة ليست طابعة نقطية أو طابعة PostScript، وأن الخطوط هي خطوط TrueType غير مُثبّتة على الطابعة نفسها. في مثل هذه الحالات، تُسيء بعض التطبيقات (بما في ذلك PageMaker و MGXDraw ) تفسير هذا الخيار، معتقدةً أن الخط مُثبّت على الجهاز. (يمكن لنظام Windows تحميل خطوط TrueType إلى الطابعات، ولا يشترط أن تكون مُثبّتة على الجهاز نفسه لتكون قابلة للاستخدام). ثم تستعلم هذه التطبيقات من الطابعة لمعرفة أحجام الخط التي تدعمها، وعندما تفشل هذه العملية (لأن الطابعة لا تتعرف على الخط إلا بعد تحميله)، فإنها تفترض خطأً أنه لا يمكن تغيير حجم الخط. يؤدي ضبط العلامة على "خطأ" في مثل هذه الحالات إلى منع التطبيقات من التعطل، وهذا ما تفعله علامة التوافق هذه. [ 5 ]DEVICE_FONTTYPEDEVICE_FONTTYPE
لا ترسل حجم الحسابWM_MOVE
هذا هو البت رقم 17 من كلمة بتات التوافق، بقيمته الست عشرية 0x20000، والمعروفة بالاسم الرمزي GACF_NCCALCSIZEONMOVEفي ملف windows.h . يُجبر هذا الخيار إرسال الرسالة إلى النافذة التي يتم نقلها أو تغيير حجمها. هذا هو سلوك نظام التشغيل Windows 3.0. في Windows 3.1، تم تغيير هذا السلوك بحيث تُرسل رسالة النافذة فقط إلى النوافذ التي يتم تغيير حجمها. لم تكن تُرسل إذا تم نقل النافذة فقط. مع ذلك، اعتمدت بعض تطبيقات Windows 3.0، مثل Lotus Notes على سبيل المثال، على استقبال هذه الرسالة دائمًا. [ 5 ]WM_NCCALCSIZE
خطوط Enum Helv و Times Roman
هذا هو البت رقم ١٢ من كلمة بتات التوافق، بقيمته الست عشرية 0x1000، والمعروفة باسمها الرمزي GACF_ENUMHELVNTMSRMNفي ملف windows.h . يعمل هذا الخيار على حل مشكلة في التطبيقات التي كانت ترفض العمل بشكل صحيح ما لم يتم إدراج الخطوط التي تحمل الاسمين "Helv" و"Tms Rmn" تحديدًا على النظام بواسطة واجهة برمجة تطبيقات تعداد خطوط ويندوز. هذان الاسمان علامتان تجاريتان لشركة Linotype لخطوط محددة، هما Helvetica و Times Roman ، ولأن مايكروسوفت لم تُضمّن هذه الخطوط مع ويندوز ٣.١، لم تتمكن من إدراجها. يؤدي هذا الخيار إلى قيام ويندوز بتعداد خطوط "MS Sans Serif" و"MS Serif" تحت الاسمين "Helv" و"Tms Rmn"، وذلك لضمان التوافق مع التطبيقات التي لا تعمل بدون استخدام هذين الاسمين تحديدًا. [ ٥ ]
فرض كلمات إضافية في نظام التشغيل Windows
هذا هو البت رقم 8 من كلمة بتات التوافق، بقيمته الست عشرية 0x100، والمعروفة بالاسم الرمزي GACF_MOREEXTRAWNDWORDSفي ملف windows.h . تعمل هذه العلامة على تجاوز مشكلة في التطبيقات التي تفترض وجود كلمات نافذة (بيانات إضافية يربطها نظام ويندوز بنوافذ واجهة المستخدم الرسومية) دون أن تُبلغ ويندوز فعليًا بضرورة وجود كلمات نافذة إضافية. على عكس ويندوز 3.0، يُجري ويندوز 3.1 فحصًا للحدود لجميع استخدامات كلمات النافذة الإضافية، وبالتالي ستفشل التطبيقات التي تفترض إمكانية استخدام مساحة أكبر مما طلبته. بالنسبة للتطبيقات التي تعمل مع تفعيل هذه العلامة، يزيد ويندوز 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 ]
تتطلب الخطافات العالمية تطبيقات ويندوز 16 فقط
تجاهل سمات المقطع القابل للتجاهل
هذا هو البت رقم 0 من كلمة بتات التوافق، بقيمته الست عشرية 0x1، والمعروفة بالاسم الرمزي GACF_IGNORENODISCARDفي ملف windows.h . يُجبر هذا الخيار البرنامج على تجاهل الخيار المُمرر إليه . وقد حلّ هذا الخيار ثغرةً في مكتبة وقت التشغيل المُرفقة مع مُصرّف لغة C الخاص بمايكروسوفت ، الإصدار 6 من لغة C. كانت مكتبة وقت التشغيل تُعيّن هذا الخيار بشكل خاطئ في استدعاءات ، وبالتالي فإن أي تطبيق مُصرّف باستخدام هذا المُصرّف سيُظهر هذا السلوك. [ 5 ]GMEM_NODISCARDGlobalAlloc()GlobalAlloc()
تجاهل الخطوط النقطية
هذا هو البت رقم 9 من كلمة بتات التوافق، بقيمته الست عشرية 0x200، والمعروفة بالاسم الرمزي GACF_TTIGNORERASTERDUPEفي ملف windows.h . يمنع هذا الخيار تعداد الخطوط ذات الأحجام المتشابهة كخطوط نقطية وخطوط TrueType في آنٍ واحد. ويعود ذلك إلى أن العديد من التطبيقات، بما في ذلك WordPerfect و Visual Basic ، لم تكن قادرة على التعامل مع هذه الحالة بشكل صحيح. [ 5 ]
تجاهل النوافذ العلوية
هذا هو البت رقم 3 من كلمة بتات التوافق، وقيمته الست عشرية 0x8، والمعروفة بالاسم الرمزي GACF_IGNORETOPMOSTفي ملف windows.h . يُصلح هذا الخيار مشكلةً مُحددةً في cc:Mail كانت تتسبب في تعطلها على نظام التشغيل Windows 3.1. كان النظام يفترض أن الوصول إلى النافذة الأولى باستخدام سيعيد نافذة التطبيق الذي بدأ تشغيله للتو . ولكن في نظام Windows 3.1، الذي قدم مفهوم النوافذ "العلوية"، لم يعد هذا صحيحًا. تسبب هذا الخيار في تخطي Windows 3.1 للنوافذ العلوية عند إجراء طلب API المُحدد هذا. [ 5 ]GetWindow(HWND,GW_HWND_FIRST)WinExec()
اختراق خاص بالوحدة
لا يوجد HRGN 1
هذا هو البت رقم 16 من كلمة بتات التوافق، بقيمته الست عشرية 0x10000، والمعروفة باسمها الرمزي GACF_NOHRGN1في ملف windows.h . يعيد هذا الخيار تفعيل خطأ كان موجودًا في نظام التشغيل Windows 3.0 وتم إصلاحه في Windows 3.1. وقد حدث ذلك لأن العديد من التطبيقات، مثل Microsoft Draw ، كانت تتجاوز هذا الخطأ بنفسها، وكانت تفشل في العمل بشكل صحيح عند إزالة الخطأ. كان الخطأ عبارة عن خلل في القيمة المُعادة من الدالة ، حيث كانت في بعض الحالات (عندما تكون النافذة بأكملها غير صالحة) تُعيد إحداثيات مستطيل التحديث بإحداثيات النافذة، بدلاً من الإحداثيات المنطقية كما هو مُفترض. في Windows 3.1، كانت تُعيد دائمًا مستطيل التحديث بالإحداثيات المنطقية. كانت التطبيقات التي تجاوزت هذا الخطأ تُجري تحويل الإحداثيات بنفسها لتجاوزه، مما أدى في النهاية إلى تحديث أجزاء خاطئة من نوافذها على Windows 3.1. [ 5 ]GetUpdateRect()
شريط رسومي واحد واستخدام مساحات الطباعة
هذا هو البت رقم ٢ من كلمة بتات التوافق، بقيمته الست عشرية 0x4، والمعروفة بالاسم الرمزي GACF_ONELANDGRXBANDفي ملف windows.h . يؤدي هذا الخيار إلى استخدام نظام التشغيل Windows 3.1 لشريط رسومات واحد عند الطباعة في الوضع الأفقي ، مستهلكًا الذاكرة اللازمة لهذا الشريط، ومتجاهلًا أي محتوى لا يتسع له. [ ٥ ]
اطرح الأشقاء المقطعين
هذا هو البت رقم 14 من كلمة بتات التوافق، بقيمته الست عشرية 0x4000، والمعروفة باسمها الرمزي GACF_SUBTRACTCLIPSIBSفي ملف windows.h . يؤدي هذا الخيار إلى تعامل نظام التشغيل Windows 3.1 مع إبطال النوافذ بشكل مختلف للنوافذ الرئيسية التي لم يتم تعيين نمط النافذة لها، وكذلك نوافذها الفرعية. (بمعنى آخر: يؤثر على مربعات الحوار وعناصر التحكم فيها). عند تفعيل هذا الخيار، لن يقوم Windows بإبطال النوافذ الفرعية المتجاورة (في ترتيب z ) الموجودة أسفل نوافذ فرعية أخرى . كان السبب الرئيسي لهذا الخيار هو تطبيقات مثل Lotus Notes 2.1، التي كانت تُنفذ مربعات التحرير والسرد الخاصة بها كنوافذ فرعية، بدلاً من نوافذ رئيسية (كما هو الحال في التنفيذ الافتراضي لمربعات التحرير والسرد في النظام). مع تفعيل هذا الخيار، تختفي مشاكل العرض الغريبة التي كانت تظهر مع هذه النوافذ. [ 5 ]WS_CLIPSIBLINGSWS_CLIPSIBLINGS
يدعم نطاقات طباعة متعددة
هذا هو البت رقم 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 بتعيينه دائمًا على أي خطوط TrueType يتم تعدادها باستخدام واجهة برمجة تطبيقات Windows. كان الهدف من ذلك هو حل مشكلة في تطبيقات مثل AmiPro وWordPerfect، حيث كان كلاهما يفترض أن جميع خطوط TrueType المتوفرة على الطابعة موجودة على الجهاز نفسه. [ 5 ]DEVICE_FONTTYPEEnumFont()
سلوك لوحة ألوان ويندوز 3.1

أعلام إضافية

حدد نظام التشغيل Windows 3.1 عشرين علامة توافق للتطبيقات. [ 5 ] وحدد نظاما التشغيل Windows 95 و98 إحدى عشرة علامة إضافية، غير موثقة في مقالة قاعدة المعرفة ولم تُخصص لها أسماء ثابتة رمزية في ملف windows.h ، وهي بقية الخيارات التي يمكن الوصول إليها عبر قائمة "خيارات متقدمة" في Make Compatible: [ 6 ]

تعطيل ذاكرة التخزين المؤقت لفرش الألوان الـ 16 ومؤقت 55 مللي ثانية
هذا هو البت رقم 29 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x20000000.
تعطيل خاصية تخزين بيانات المجال الكهرومغناطيسي
هذا هو البت رقم 26 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x4000000.
تعطيل ارتباطات الخطوط
هذا هو البت رقم 24 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x1000000.
لا تقم بإرفاق خيط الإدخال عند كتابة اليوميات، SetActiveWindow==SetForeGroundWindow
هذا هو البت رقم 28 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x10000000.
لا تقم بإيقاف التشغيل/تجاهل بعض الأخطاء/فك علامات الاقتباس من سطر الأوامر
هذا هو البت رقم 25 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x2000000.
تفعيل ميزات واجهة المستخدم 3.x
هذا هو البت رقم 27 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x8000000.
فرض حجم وضع مطور الطابعة في ويندوز 31
هذا هو البت رقم 23 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x800000.
زيادة حجم المكدس
هذا هو البت رقم 22 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x400000.
الكذب بشأن حدود الجهاز/عدم SetDIBitsالتحقق
هذا هو البت رقم 20 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x100000.
الكذب بشأن إصدار ويندوز
هذا هو البت رقم 21 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x200000.
نسخ الخطوط في ملف win.ini
هذا هو البت رقم 30 من كلمة بتات التوافق، بقيمة سداسية عشرية 0x40000000.

مراجع

  1. 1 2 3 4 5 6 7 8 تيم أورايلي؛ تروي موت ووالتر ج. جلين (1999). "اجعل متوافقًا" . ويندوز 98 باختصار . أورايلي. الصفحات 227-228 . ISBN  978-1-56592-486-4.
  2. ↑ تشارلز ج . بروكس (2002). شهادة A+: (الامتحانات 220-221، 220-222) ( الطبعة الرابعة). Que. ص 799. ISBN   978-0-7897-2844-9.
  3. 1 2 3 رون بتروشا (1 أغسطس 1999). "إلى أين أركض؟" . windowsdevcenter.com . O'Reilly Media, Inc.
  4. 1 2 3 إد بوت ووودي ليونارد. "تشغيل التطبيقات القديمة" . 95 سرًا غير موثق فقط . شركة زيف ديفيس للنشر.
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 أندرو شولمان ؛ ديفيد ماكسي ومات بيترك ( 1992 ) . " KERNEL : خدمات نظام ويندوز" . ويندوز غير الموثق . أديسون-ويسلي. الصفحات 244-250 . ISBN  0-201-60834-0.
  6. ريك كوغل. "حيل توافق البرامج ذات 16 بت في نظام ويندوز" . مؤرشف من الأصل في 2 سبتمبر 2007. تم الاطلاع عليه في 10 فبراير 2009 .{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=

للمزيد من القراءة