请问如何通过程序删除/添加一个系统字体?如果删除成功,打开写字板程序,字体下拉框不会显示该字体。如果添加成功,则写字板程序正确显示改字体。目前我只知道如果手工完成以上步骤:
1. 打开资源管理器,进入c:\windows\fonts目录。(不同操作系统有不同windows目录)
2. 选择文件-》添加新字体/删除 完成系统字体的添加删除操作。我尝试过GDI++32的API AddFontResource/RemoveFontResource方法,可是RemoveFontResource总是失败,不知道为什么?总之,希望大家告诉我如果通过程序完成上述工作?谢谢!

解决方案 »

  1.   

    http://www.codeproject.com/gdi/FontInstaller.asp
      

  2.   

    添加和删除字体后都用SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
      

  3.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_1m3p.aspResAn application that adds or removes fonts from the system font table should notify other windows of the change by sending a WM_FONTCHANGE message to all top-level windows in the system. The application sends this message by calling the SendMessage function with the hwnd parameter set to HWND_BROADCAST.If there are outstanding references to a font, the associated resource remains loaded until no device context is using it.
      

  4.   

    谢谢大家。我也发送了那些比如WM_FontChange消息,可是不管用。另,字体当时应该不在使用中,因为可以手工方式删除。
      

  5.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=208073
      

  6.   

    http://dev.csdn.net/article/42/42238.shtm
      

  7.   

    to lixiaosan(小三),谢谢你提供的codeproject程序。看起来那个字体是为该程序使用,而非整个系统,当我通过点击install按钮,安装了那个字体后,写字板程序并没有出现该字体。
      

  8.   

    能够提供一个程序,我希望删除掉系统中的Roman字体。
      

  9.   

    If err,see:http://support.microsoft.com/kb/230179/en-us
      

  10.   

    谢谢大家,我的代码还是出了问题,删除Roman字体的步骤如下,
    1. 调用RemoveFontResource方法。(返回值为非0,代表成功)
    2. 发送消息通知字体变化。(返回值为1,代表成功)
    3. 移动c:\windows\fonts\roman.fon文件。(File.Move方法)代码运行一切正常,从资源浏览器打开c:\windows\fonts,还是可以看到roman,但文件大小变为0。打开写字板,依然可以看到roman。 这些特征和手工删除Roman的情况不一样。证明这个字体还是没有完全从系统中删除。
      

  11.   

    还需要从注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 删除ROMAN.FON项目
      

  12.   

    to 狼行天下,
    上述代码已经删除注册表项目了。希望大家给一段代码删除系统字体Roman。(测试:打开写字板,选择字体,查看是否被删除)