Alterando a fonte do sistema Windows 8

1

Em uma máquina típica em inglês, alterar o valor de MS Shell Dlg e MS Shell Dlg 2 em FontSubstitutes modificará a fonte usada nos menus em todo o sistema. No entanto, não parece funcionar na minha máquina não inglesa. A fonte aplicada ainda é a interface do usuário do Microsoft JhengHei, como eu posso dizer.

Outra abordagem de acordo com esta postagem é editá-la entradas em HKCU\Control Panel\Desktop\WindowMetrics , no entanto todas elas estão em binário e eu realmente não sei como editá-las, embora isso pareça ser o lugar certo para mudar a fonte.

De acordo com Microsoft TechNet , o valor padrão para as entradas em WindowMetrics é MS Shell Dlg [ 2 ]. Mas na minha máquina é Microsoft JhengHei UI . Isso explica porque mudar o substituto de fonte para MS Shell Dlg não funcionou.

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)

A questão é: como você edita esse valor binário? Quais são os 00 bytes de preenchimento? E também o que significa F4 FF FF FF ?

(Eu sinto que o SO pode ser um lugar melhor para postar isso. Se você acredita que isso é mais adequado para ser perguntado sobre SO, por favor, migre essa questão para lá.)

De acordo com este site , ele contém "informações sobre a fonte usada pelo Windows, tamanho e outras opções (normal, negrito, itálico) ". No entanto, isso não explica como essas informações são organizadas na string.

Eu também li que é apenas o binário de um Estrutura LOGFONT . Como edito isso? Existem ferramentas para isso?

    
por Derek 朕會功夫 01.01.2015 / 23:55

1 resposta

1

Tudo bem, acredito que recebo a estrutura dessa string binária. Está no formato de LOGFONT , que é dividido em 14 partes, incluindo os primeiros 20 bytes como 4 inteiros longos em little endians, os próximos 8 bytes como bytes e uma string.

No meu exemplo, F4 FF FF FF significa que a altura é FFFFFFF4 em hexadecimal (long int), que é -11 em decimal. Convertê-lo em pixels seria 8.

O próximo 00 00 00 00 significa a largura. Definir como 0 seria calculado automaticamente.

Os próximos 8 bytes correspondem a lfEscapement e lfOrientation , o que realmente não importa.

Os próximos 4 bytes 90 01 00 00 é 190 (400 em decimal) é o peso. 400 correspondem a FW_NORMAL .

Os próximos 3 bytes são lfItalic , lfUnderline e lfStrikeOut . Bastante auto-explicativo.

O próximo byte seria lfCharSet . Ele indica o conjunto de caracteres a ser usado de acordo com esta enumeração . 0x01 seria DEFAULT_CHARSET .

Os próximos 4 bytes são para outra coisa: lfOutPrecision , lfClipPrecision , lfQuality , lfPitchAndFamily .

Depois vem a parte principal. Para os próximos 64 bytes, é uma string do nome da fonte que você deseja usar em 32 TCHARs. Para caracteres ASCII, simplesmente separe cada caractere por um 00 , já que o TCHAR é apenas Unicode de 16 bits.

Em conclusão, para alterar a fonte de cada parte da interface do usuário do sistema, modifique a entrada binária de acordo com a estrutura acima.

PS: A alteração do substituto de MS Shell Dlg (2) não funcionaria para todos, já que nem todos os idiomas do Windows usam isso como a fonte da interface do usuário. Outro site mencionado em este comentário que substitui o nome da fonte Segoe UI diretamente para a sua fonte desejada também não vai funcionar, e como um lado Efeito você também não será capaz de usar a fonte Segoe UI .

A modificação de WindowMetrics pode ser a única maneira correta de alterar a fonte do sistema.

    
por 02.01.2015 / 03:20