【问题标题】:Monitor Install/Uninstall of Fonts on Windows在 Windows 上监控字体的安装/卸载
【发布时间】:2010-09-04 04:12:01
【问题描述】:

我在这里有点摸不着头脑——搜索似乎没有什么成效。我想创建一个 .NET 程序来监控字体的安装和卸载。如果安装或卸载了某些东西,我想运行一个程序来做某事。

我认为可能是 Windows 服务,但在弄清楚如何监控字体方面还没有走得太远。这是正确的方法吗?如果是,我忽略了什么?如果没有,是否有其他方法可以做到这一点?

【问题讨论】:

    标签: c# .net vb.net windows-services fonts


    【解决方案1】:

    您可以监视注册表的字体更改。查看进程监视器,我看到它将信息存储在 Windows 7 上。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

    【讨论】:

    • 这意味着什么?每秒对该键运行一次查询以查看 .Count 是否已更改?
    • 如果应用程序正在运行,最好获取一个事件。然后在获取事件后,您可以查看注册表以检查更改。在启动时,您可以枚举注册表中的字体以检查更改。
    【解决方案2】:

    您可以为WM_FONTCHANGE windows 消息创建一个挂钩。

    查看这篇文章Using Window Messages to Implement Global System Hooks in C#

    【讨论】:

    • Windows 是否在安装/卸载时发送此消息?或者,我猜更准确地说,Windows 使用AddFontResource 还是RemoveFontResource
    • @Otaku,检查来自答案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 开始,它声明 此函数仅为当前会话安装字体。当系统重新启动时,字体将不存在。要在重新启动系统后安装字体,字体必须列在注册表中。因此,以这种方式监控字体添加不会显示实际安装了哪些字体。
    • 我不明白这个问题。如果系统重新启动,那么无论如何您都必须再次枚举字体。
    【解决方案3】:

    我对字体了解不多,所以我可能会弄错,但我认为它们都安装在 %windir%\Fonts 中。

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

    【讨论】:

    • 大部分是,但不是全部(Vista/7 允许在 %windir%\Fonts 之外安装字体)。
    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2011-05-24
    相关资源
    最近更新 更多