【发布时间】:2010-09-04 04:12:01
【问题描述】:
我在这里有点摸不着头脑——搜索似乎没有什么成效。我想创建一个 .NET 程序来监控字体的安装和卸载。如果安装或卸载了某些东西,我想运行一个程序来做某事。
我认为可能是 Windows 服务,但在弄清楚如何监控字体方面还没有走得太远。这是正确的方法吗?如果是,我忽略了什么?如果没有,是否有其他方法可以做到这一点?
【问题讨论】:
标签: c# .net vb.net windows-services fonts
我在这里有点摸不着头脑——搜索似乎没有什么成效。我想创建一个 .NET 程序来监控字体的安装和卸载。如果安装或卸载了某些东西,我想运行一个程序来做某事。
我认为可能是 Windows 服务,但在弄清楚如何监控字体方面还没有走得太远。这是正确的方法吗?如果是,我忽略了什么?如果没有,是否有其他方法可以做到这一点?
【问题讨论】:
标签: c# .net vb.net windows-services fonts
您可以监视注册表的字体更改。查看进程监视器,我看到它将信息存储在 Windows 7 上。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
【讨论】:
.Count 是否已更改?
您可以为WM_FONTCHANGE windows 消息创建一个挂钩。
查看这篇文章Using Window Messages to Implement Global System Hooks in C#
【讨论】:
AddFontResource 还是RemoveFontResource?
An application that adds or removes fonts from the system (for example, by using the AddFontResource or RemoveFontResource function) should send this message to all top-level windows.的Msdn链接
AddFontResource 不会永久安装字体。从msdn.microsoft.com/en-us/library/dd183326(VS.85).aspx 开始,它声明 此函数仅为当前会话安装字体。当系统重新启动时,字体将不存在。要在重新启动系统后安装字体,字体必须列在注册表中。因此,以这种方式监控字体添加不会显示实际安装了哪些字体。
我对字体了解不多,所以我可能会弄错,但我认为它们都安装在 %windir%\Fonts 中。
如果是这种情况,您应该能够在您的服务中设置FileSystemWatcher 来监视该目录是否有任何更改。
【讨论】: