1

На типичной английской машине изменение значений MS Shell Dlg и MS Shell Dlg 2 в FontSubstitutes приведет к изменению шрифта, используемого в общесистемном меню. Тем не менее, он не работает на моей машине, кроме английского. Применяемый шрифт - все еще пользовательский интерфейс Microsoft JhengHei, насколько я могу судить.

В соответствии с этим постом другой подход заключается в редактировании записей в HKCU\Control Panel\Desktop\WindowMetrics , однако все они в двоичном формате, и я не знаю, как их редактировать, хотя кажется, что это правильное место для изменения шрифт.

Согласно Microsoft TechNet, значением по умолчанию для записей в WindowMetrics является MS Shell Dlg [ 2 ]. Но на моей машине это Microsoft JhengHei UI . Это объясняет, почему замена замены шрифта для MS Shell Dlg в первую очередь не работала.

F4 FF FF FF 00 00 00 00  random bytes but probably control characters
00 00 00 00 00 00 00 00
90 01 00 00 00 00 00 01
00 00 00 00 4D 00 69 00  main string starts here
63 00 72 00 6F 00 73 00
.........

(ôÿÿÿMicrosoft JhengHei UI)

Вопрос в том, как вы редактируете это двоичное значение? Для чего нужны отступы 00 байтов? А также что означает F4 FF FF FF ?

(Я чувствую, что SO может быть лучшим местом для публикации этого. Если вы считаете, что этот вопрос более подходит для SO, перенесите этот вопрос туда.)


Согласно этому сайту, он содержит «информацию о шрифте, используемом Windows, размере и других параметрах (обычный, полужирный, курсив)». Тем не менее, это не объясняет, как эти данные расположены в строке.


Я также прочитал, что это просто двоичный файл структуры LOGFONT. Как мне отредактировать это? Есть ли инструменты для этого?

1 ответ1

1

Хорошо, я верю, что понимаю структуру этой двоичной строки. Он находится в формате LOGFONT, который разделен на 14 частей, включая первые 20 байтов в виде 4 длинных целых чисел в младших порядковых номерах, следующие 8 байтов в виде байтов и строку.

В моем примере F4 FF FF FF означает, что высота равна FFFFFFF4 в шестнадцатеричном (long int), то есть -11 в десятичном. Преобразование его в пиксели будет 8.

Следующий 00 00 00 00 означает ширину. Установка его в 0 сделает его автоматически рассчитанным.

Следующие 8 байтов соответствуют lfEscapement и lfOrientation которые на самом деле не имеют значения.

Следующие 4 байта 90 01 00 00 - это 190 (400 в десятичном виде) - это вес. 400 соответствуют FW_NORMAL .

Следующие 3 байта - это lfItalic , lfUnderline и lfStrikeOut . Довольно понятно.

Следующий байт будет lfCharSet . В нем указывается набор символов, который будет использоваться в соответствии с этим перечислением . 0x01 будет DEFAULT_CHARSET .

Следующие 4 байта предназначены для чего-то другого: lfOutPrecision , lfClipPrecision , lfQuality , lfPitchAndFamily .

Затем идет основная часть. Для следующих 64 байтов это строка имени шрифта, которую вы хотите использовать в 32 TCHAR. Для символов ASCII просто разделите каждый символ на 00 поскольку TCHAR - это просто 16-битный Unicode.

В заключение, чтобы изменить шрифт каждой части системного интерфейса, измените двоичную запись в соответствии со структурой выше.


PS: Изменение замены MS Shell Dlg (2) не будет работать для всех, так как не все языки Windows используют его в качестве шрифта пользовательского интерфейса. Другой сайт, упомянутый в этом комментарии, который заменяет имя шрифта Segoe UI непосредственно на нужный шрифт, также не будет работать, и в качестве побочного эффекта вы также вообще не сможете использовать шрифт Segoe UI .

Изменение WindowMetrics может быть единственным правильным способом изменить системный шрифт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .