在Windows上监控字体的安装/卸载

3

我有些不确定,搜索似乎对此没有产生成果。我想创建一个.NET程序来监视字体的安装和卸载。如果某个字体被安装或卸载,我希望运行一个程序来执行一些操作。

我想也许可以使用Windows服务,但是还没有找到如何监视字体的方法。这种方式是否正确?如果是,我忽略了什么?如果不是,有没有其他方法可以实现?

3个回答

2
你可以监视注册表以检测字体更改。从进程监视器中可以看到,在Windows 7上,它将信息存储在以下位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts。

这意味着什么?每秒针对该键运行查询以查看“ .Count”是否已更改? - Todd Main
如果应用程序正在运行,最好获取事件。然后在获取事件后,您可以浏览注册表以检查更改。在启动时,您还可以枚举注册表中的字体以检查更改。 - Jason Rowe

1

Windows在安装/卸载时会发送此消息吗?或者更准确地说,Windows是否使用AddFontResourceRemoveFontResource - Todd Main
@Otaku,从答案中检查Msdn链接:“向系统添加或删除字体的应用程序(例如,使用AddFontResource或RemoveFontResource函数)应向所有顶级窗口发送此消息。” - RRUZ
我尝试过了。不幸的是,“AddFontResource”不能永久安装字体。根据http://msdn.microsoft.com/en-us/library/dd183326(VS.85).aspx所述,*此函数仅在当前会话中安装字体。当系统重新启动时,该字体将不存在。要想在重启系统后仍然安装该字体,必须将字体列在注册表中*。 因此,通过这种方式监视字体添加并不能揭示实际安装了哪些字体。 - Todd Main
我不明白问题所在。如果系统重新启动,那么你仍然需要重新枚举字体。 - Hans Passant

0

关于字体,我了解得不是很多,所以可能会有错误,但我认为它们都安装在%windir%\Fonts中。

如果是这种情况,您应该能够在您的服务中设置FileSystemWatcher来监视该目录是否有任何更改。


大多数情况下是这样的,但并非全部(Vista/7允许在%windir%\Fonts之外安装字体)。 - Todd Main

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接