需要在所有用户的机器上安装一个字体,该字体将使用我正在编写的在Word中创build自定义文档的应用程序。 这是一个条形码字体。
我已成功将字体添加到我的解决scheme,并将其构build操作设置为Embedded Resource,并成功编写代码以检查字体是否已安装在用户的系统上。
现在,我只需要弄清楚如何从我的解决scheme中提取字体,并将其安装到用户的机器上,就好像他们自己安装了用于Office应用程序的字体一样。
我发现的大多数例子都是在VB.NET应用程序中使用字体,而不是在外部使用,而我发现的那些似乎适合我的目的的字体并不适合我。
如何在Linux上转储.NET核心应用程序
.NET应用程序在客户端机器中根本不启动
注意IP地址状态的变化
使用Windows事件日志有哪些选项?
是否有可能确定哪个进程启动我的.Net应用程序?
是否有.NET接口来编辑Windows DNS服务器区域?
在.NET中检测远程DHCP服务器
如何从另一个应用程序的窗口中的控件读取数据?
我的程序甚至需要pipe理员权限才能打开文件,这是否正常?
将字体复制到Windows字体文件夹,然后您需要将字体添加到注册表。 我没有尝试过这个,但我认为可以通过使用ShellExecuteA api以类似的方式打开字体来做到这一点 。
这里有一个VBScript的做法,可能是有用的起点,因为你可能能够在VB.Net中使用类似的语法和功能: 嘿,脚本专家! 如何使用脚本安装字体?
首先,您需要将字体复制到Windows Fonts目录中(您将需要确保使用.NET Framework提供的Environment.GetFolderPath方法,而不是将典型路径硬编码到Windows目录,在某个用户的环境中,情况有所不同)。
然后,您需要调用AddFontResource函数将字体添加到系统字体表。 由于AddFontResource是由Windows API提供的,因此您需要使用P / Invoke从VB.NET代码调用它。 声明看起来像这样( lpszFilename参数是要添加的字体文件的路径):
<DllImport("gdi32.dll"),CharSet := CharSet.Auto> _ Public Shared Function AddFontResource(ByVal lpszFilename As String) As Integer
最后,如果在您从代码中调用AddFontResource函数的时候,Word(或任何您打算使用该字体的应用程序)正在运行 ,则需要通知它可用的字体已更改。 您可以通过使用SendMessage函数向所有顶级窗口发送WM_FONTCHANGE消息并将hWnd参数设置为HWND_broADCAST来HWND_broADCAST 。 再次,你需要P / Invoke; 声明如下所示:
Public Const HWND_broADCAST As Integer = &HFFFF Public Const WM_FONTCHANGE As Integer = &H1D <DllImport("user32.dll"),CharSet := CharSet.Auto> _ Public Shared Function SendMessage(ByVal hWnd As IntPtr,ByVal wMsg As Integer,ByVal wParam As IntPtr,ByVal lParam As IntPtr) As Integer
你会打电话来发送这样的广播消息:
SendMessage(New IntPtr(HWND_broADCAST),WM_FONTCHANGE,IntPtr.Zero,IntPtr.Zero)
注:上述步骤仅安装当前Windows会话的字体。 如果您需要在随后的重新启动时使用该字体,则需要将其添加到注册表中。 修改的关键是这一个:
HKEY_LOCAL_MACHInesOFTWAREMicrosoftwindows NTCurrentVersionFonts
首先,将字体复制到Windows字体文件夹,然后使用p / invoke调用AddFontResource 。
UPDATE
新的网址
http://brutaldev.com/post/2009/03/26/Installing-and-removing-fonts-using-C.aspx
我使用安装程序项目来安装我的应用程序所需的字体,并遵循本指南
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。