Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 监视Windows上字体的安装/卸载_C#_.net_Vb.net_Windows Services_Fonts - Fatal编程技术网

C# 监视Windows上字体的安装/卸载

C# 监视Windows上字体的安装/卸载,c#,.net,vb.net,windows-services,fonts,C#,.net,Vb.net,Windows Services,Fonts,我有点像是在黑暗中拍摄的——搜索在这方面似乎没有什么效果。我想创建一个.NET程序来监视字体的安装和卸载。如果安装或卸载了一些东西,我想运行一个程序来做一些事情 我想可能是Windows服务,但还没有弄清楚如何监控字体。这是正确的方法吗?如果是,我忽略了什么?如果没有,还有其他方法吗?您可以为windows消息创建一个钩子 查看本文您可以监视注册表中的字体更改。查看进程监视器,我看到它将信息存储在Windows7上 HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsof

我有点像是在黑暗中拍摄的——搜索在这方面似乎没有什么效果。我想创建一个.NET程序来监视字体的安装和卸载。如果安装或卸载了一些东西,我想运行一个程序来做一些事情


我想可能是Windows服务,但还没有弄清楚如何监控字体。这是正确的方法吗?如果是,我忽略了什么?如果没有,还有其他方法吗?

您可以为windows消息创建一个钩子


查看本文

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


HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

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


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

Windows是否在安装/卸载时发送此消息?或者,我想更准确地说,Windows是否使用
AddFontResource
RemoveFontResource
?@Otaku,从回答
中检查Msdn链接,该应用程序可在系统中添加或删除字体(例如,通过使用AddFontResource或RemoveFontResource函数)应该将此消息发送到所有顶级窗口。
我发送了。不幸的是,
AddFontResource
没有永久安装字体。从它的状态来看,此函数仅为当前会话安装字体。系统重新启动时,字体将不存在。要在重新启动系统后安装字体,必须在注册表中列出字体。因此,通过这种方式监控字体添加不会显示实际安装了哪些字体。我不明白这个问题。如果系统重新启动,那么您必须再次枚举字体。这需要什么?每隔一秒钟对该键运行一次查询,查看
.Count
是否已更改?如果应用程序正在运行,最好获取一个事件。然后在获得事件后,您可以查看注册表以检查更改。启动时,您可以枚举注册表中的字体以检查是否有更改。大多数是,但不是全部(Vista/7允许在%windir%\fonts之外安装字体)。