En primer lugar, tiene que copiar la fuente del directorio de Windows \ Fonts (querrá asegurarse de usar el método Environment.GetFolderPath
proporcionado por .NET Framework en lugar de codificar la ruta típica de acceso a la ventana) s directorio, en caso de que algo sea diferente en uno de los entornos de los usuarios).
Luego, debe llamar al AddFontResource
function para agregar la fuente a la tabla de fuentes del sistema. Como el API de Windows proporciona AddFontResource
, necesitará P/Invoke para llamarlo desde el código VB.NET. La declaración se ve algo como esto (el parámetro lpszFilename
es la ruta del archivo de fuente que desea agregar):
<DllImport("gdi32.dll"), CharSet := CharSet.Auto> _
Public Shared Function AddFontResource(ByVal lpszFilename As String) As Integer
Por último, si Word (o cualquier aplicación que tiene la intención de utilizar la fuente en) es consecutivo en el momento en que llame a la función AddFontResource
desde su código, debe informarle que las fuentes disponibles han cambiado. Para ello, envíe un mensaje WM_FONTCHANGE
a todas las ventanas de nivel superior utilizando la función SendMessage
y estableciendo el parámetro hWnd
en HWND_BROADCAST
. Nuevamente, necesitarás P/invocar; las declaraciones se ven así:
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
Y lo llamarían para enviar el mensaje de difusión de esta manera:
SendMessage(New IntPtr(HWND_BROADCAST), WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero)
NOTA: Los pasos anteriores sólo instalar la fuente para la sesión actual de Windows. Si necesita que la fuente esté disponible en reinicios posteriores, debe agregarla al registro. La clave para modificar es éste:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
Solo para comentar que necesita asegurarse de que se le permite distribuir la fuente - las fuentes son software como su programa y necesita permiso antes de distribuir uno de la manera que describe. – Oded
Este es el tipo de cosas que típicamente (y mejor) realiza un * instalador *, en lugar de su programa en sí. Por lo general, es más fácil decirle a su programa de instalación que instale una fuente que hacerlo desde su aplicación. –
Eso sería genial, pero supongo que eso no es algo que se pueda hacer con el instalador ClickOnce que viene con Visual Studio 2010 ¿verdad? – Tom