سؤال

لتطبيق Windows Mobile الخاص بنا ، أريد تمكين خيار ClearType على الجهاز. بالنسبة الى هذه مقال على MSDN يجب أن يتم تعيين مفتاح التسجيل التالي:

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype

ولكن لا يحدث شيء بعد تعيين هذا المفتاح بالذات. حتى إعادة تعيين ناعمة لا تمكنه ، ولكن ببساطة تتخلص من مفتاح التسجيل الذي أنشأته للتو.

الشيء الغريب هو أنه عندما أقوم بتعيينه يدويًا باستخدام الإعدادات-> النظام-> الشاشة-> cleartype ، فإنه يعمل على الفور. ومقارنة صادرات السجل قبل وبعد تغيير الإعداد تظهر أنه هو مجرد المفتاح المذكور أعلاه الذي يتغير.

لا أفهم تمامًا سبب عدم عمله عندما أقوم بتغيير مفتاح التسجيل بنفسي. أي شخص يعرف ما أفعله خطأ هنا؟

تحديث] يبدو أن الحل هو القيام إما:

  • بث رسالة wm_settingchange مع المعلمات الصحيحة مثل:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    لكن هذا لم ينجح حتى الآن. أعتقد أن معلمة WPARAM قد تحتاج إلى قيمة مختلفة.

  • أو استدعاء CreateVent مع الحدث ذي الصلة لتغييرات ClearType. مثل بعض الإضاءة الخلفية أو SDKBackLightChangeEvent ستعمل. لكنني لم أر حتى الآن أي وثائق حول هذه الأحداث ، لذلك لا يمكنني معرفة ما سيكون عليه الحدث.

هل كانت مفيدة؟

المحلول

لقد وجدت الحل بنفسي. اتضح أن إجراء تغيير في السجل غير مطلوب ، ولكن مجرد دعوة إلى SystemParametersInfo مع معلمة SPI_SETFONTSMOTHING كافية لجعلها تطبق التغييرات.

هذا هو الكود الخاص بي باستخدام .NET CF 2.0:

[DllImport("coredll.dll", SetLastError = true)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref int pvParam, uint fWinIni);

const uint SPI_SETFONTSMOOTHING = 0x004b;
const uint SPI_UPDATEINI = 0x1;

int pv = 0;
bool ret = SystemParametersInfo(SPI_SETFONTSMOOTHING, 1, ref pv, SPIF_UPDATEINIFILE);

نصائح أخرى

هل قمت بطرد السجل بعد تغيير القيمة وقبل القيام بإعادة التعيين الناعم؟
يبدو أن التغيير لم يستمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top