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.