最近开坑《With Ribbon》但发现并没有更换字体的选项,默认字体缺少简体中文字符,看得很难受
由于笔者不会win32,就偷了两个开源项目改字体
注意:笔者仅测试了一个游戏(引擎KIRIKIRI 2.32.1.426)可以成功更改字体,不保证对所有程序可用
更改字体使用以下工具:ysc3839/FontMod: Simple hook tool to change Win32 program font. (github.com)
加载dll使用以下工具:hasherezade/dll_injector: A simple commandline injector using classic DLL injection (github.com)
以《With Ribbon》为例
首先需要使游戏主程序加载更改字体用的dll,将FontMod.dll
放入和游戏主程序相同目录下,使用dll_injector
启动(需要对应32/64位)
.\dll_injector32.exe /dll .\FontMod.dll /target .\WithRibbon.exe
也可以按照dll仓库README操作,更改为提到的几个dll名称(笔者改成d3d9.dll
不行,ddraw.dll
可以,大概和游戏使用图形API有关)
第一次运行后会在同目录生成FontMod.yaml
,在fonts
选项下面更改成需要的字体,若游戏使用gdi之类的东西,修改配置会稍有区别,具体参见FontMod的git仓库
若不知道是什么字体,将配置文件的debug选项设为true,查看log后再进行尝试
log示例:
这个乱码的“俵俽 俹僑僔僢僋”实际上是Shift-JIS编码的日文“MS Pゴシック”强制使用GBK编码表示的结果。但在写配置文件时,这部分还是需要保持乱码,不然替换将不能生效。若操作系统语言不是简体中文,或者开启了系统实验性UTF-8支持,可能这里的字体名字也会有相应的变化。
笔者最终配置(部分):
fonts:
# MS Pゴシック:
俵俽 俹僑僔僢僋:
replace: 思源黑体 CN Medium
<<: *style
效果:
最后再贴一个PowerShell脚本(来源)获取OpenType字体信息(不过好像没什么用):
$folder = "C:\Windows\fonts\"
$objShell = New-Object -ComObject Shell.Application
$fileList = @()
$attrList = @{}
$details = ( "Title",
"Font style",
"Show/hide",
"Designed for",
"Category",
"Designer/foundry" ,
"Font Embeddability",
"Font type",
"Family",
"Date created",
"Date modified",
"Collection",
"Font file names",
"Font version"
)
#figure out what the possible metadata is
$objFolder = $objShell.namespace($folder)
for ($attr = 0 ; $attr -le 500; $attr++)
{
$attrName = $objFolder.getDetailsOf($objFolder.items, $attr)
if ( $attrName -and ( -not $attrList.Contains($attrName) ))
{
$attrList.add( $attrName, $attr )
}
}
#$attrList
#loop through all the fonts, and process
$objFolder = $objShell.namespace($folder)
foreach($file in $objFolder.items())
{
foreach( $attr in $details)
{
$attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])
if ( $attrValue )
{
Add-Member -InputObject $file -MemberType NoteProperty -Name $attr -value $attrValue
}
}
$fileList += $file
write-verbose "Prcessing file number $($fileList.Count)"
}
$fileList | select $details | out-gridview
Views: 353