Bumped SourceCodePro to 1.017
- Totally overhauled font install process since the previous version required lots of interaction / prompting to upgrade existing fonts AND had a clunky UI dialog when installing fonts for the first time - Leveraging Windows Powershell sample script that compiles C# on the fly to call Win32 APIs that deal with fonts - Elevate to admin to run the new stuff - no reboot required
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
<metadata>
|
<metadata>
|
||||||
<id>SourceCodePro</id>
|
<id>SourceCodePro</id>
|
||||||
<title>Source Code Pro Programming Font</title>
|
<title>Source Code Pro Programming Font</title>
|
||||||
<version>1.010</version>
|
<version>1.017.1</version>
|
||||||
<authors>Adobe Systems Incorporated</authors>
|
<authors>Adobe Systems Incorporated</authors>
|
||||||
<owners>Ethan Brown</owners>
|
<owners>Ethan Brown</owners>
|
||||||
<summary>Monospaced OpenType programming font</summary>
|
<summary>Monospaced OpenType programming font</summary>
|
||||||
@@ -14,9 +14,56 @@
|
|||||||
<licenseUrl>https://github.com/adobe/Source-Code-Pro/blob/master/LICENSE.txt</licenseUrl>
|
<licenseUrl>https://github.com/adobe/Source-Code-Pro/blob/master/LICENSE.txt</licenseUrl>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<iconUrl>http://blogs.adobe.com/typblography/files/2012/09/SourceCodeSplash.png</iconUrl>
|
<iconUrl>http://blogs.adobe.com/typblography/files/2012/09/SourceCodeSplash.png</iconUrl>
|
||||||
<releaseNotes></releaseNotes>
|
<releaseNotes> version 1.017 created 2013/01/11
|
||||||
|
|
||||||
|
Updates the hinting to the default asterisk in some styles that were missed in the previous version.
|
||||||
|
Updates the design of the asterisk glyphs, bar, and broken bar.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.016 created 2013/01/09
|
||||||
|
|
||||||
|
Updates the hinting to the default asterisk in all styles.
|
||||||
|
Adds an new Medium weight to the font project.
|
||||||
|
Updates design of the following glyphs to center them within glyph height/width:
|
||||||
|
lighttrpldashhorzbxd
|
||||||
|
heavytrpldashhorzbxd
|
||||||
|
lighttrpldashvertbxd
|
||||||
|
heavytrpldashvertbxd
|
||||||
|
lightquaddashhorzbxd
|
||||||
|
heavyquaddashhorzbxd
|
||||||
|
lightquaddashvertbxd
|
||||||
|
heavyquaddashvertbxd
|
||||||
|
lightdbldashhorzbxd
|
||||||
|
heavydbldashhorzbxd
|
||||||
|
lightdbldashvertbxd
|
||||||
|
heavydbldashvertbxd
|
||||||
|
|
||||||
|
|
||||||
|
version 1.013 created 2012/11/29
|
||||||
|
|
||||||
|
Updates design of asterisk and hyphen to accommodate coders' preferences.
|
||||||
|
Realigns math and punctuation glyphs.
|
||||||
|
Adds a stylistic set <ss01> for typographic alternates.
|
||||||
|
Adds a stylistic set <ss04> for alternate dollar sign.
|
||||||
|
Adds a small number of IPA characters.
|
||||||
|
Adds box drawing characters and block elements.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.011 created 2012/10/19
|
||||||
|
|
||||||
|
Rebuilt fonts with new MakeOTF version.
|
||||||
|
|
||||||
|
version 1.010 created 2012/09/30
|
||||||
|
|
||||||
|
Fixed TrueType hinting problem in Bold ampersand.
|
||||||
|
|
||||||
|
version 1.009 created 2012/09/20
|
||||||
|
|
||||||
|
First release.
|
||||||
|
</releaseNotes>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
<file src="tools\**" target="tools" />
|
<file src="tools\**" target="tools" />
|
||||||
|
<file src="..\core\FontHelpers.ps1" target="tools" />
|
||||||
</files>
|
</files>
|
||||||
</package>
|
</package>
|
||||||
|
@@ -1,7 +1,16 @@
|
|||||||
|
function Get-CurrentDirectory
|
||||||
|
{
|
||||||
|
$thisName = $MyInvocation.MyCommand.Name
|
||||||
|
[IO.Path]::GetDirectoryName((Get-Content function:$thisName).File)
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$package = 'SourceCodePro'
|
$package = 'SourceCodePro'
|
||||||
|
|
||||||
$fontUrl = 'https://github.com/downloads/adobe/Source-Code-Pro/SourceCodePro_FontsOnly-1.010.zip'
|
$fontHelpersPath = (Join-Path (Get-CurrentDirectory) 'FontHelpers.ps1')
|
||||||
|
. $fontHelpersPath
|
||||||
|
|
||||||
|
$fontUrl = 'http://sourceforge.net/projects/sourcecodepro.adobe/files/SourceCodePro_FontsOnly-1.017.zip/download'
|
||||||
$destination = Join-Path $Env:Temp 'SourceCodePro'
|
$destination = Join-Path $Env:Temp 'SourceCodePro'
|
||||||
|
|
||||||
Install-ChocolateyZipPackage -url $fontUrl -unzipLocation $destination
|
Install-ChocolateyZipPackage -url $fontUrl -unzipLocation $destination
|
||||||
@@ -9,8 +18,22 @@ try {
|
|||||||
$shell = New-Object -ComObject Shell.Application
|
$shell = New-Object -ComObject Shell.Application
|
||||||
$fontsFolder = $shell.Namespace(0x14)
|
$fontsFolder = $shell.Namespace(0x14)
|
||||||
|
|
||||||
Get-ChildItem $destination -Recurse -Filter *.otf |
|
$fontFiles = Get-ChildItem $destination -Recurse -Filter *.otf
|
||||||
% { $fontsFolder.CopyHere($_.FullName) }
|
|
||||||
|
# unfortunately the font install process totally ignores shell flags :(
|
||||||
|
# http://social.technet.microsoft.com/Forums/en-IE/winserverpowershell/thread/fcc98ba5-6ce4-466b-a927-bb2cc3851b59
|
||||||
|
# so resort to a nasty hack of compiling some C#, and running as admin instead of just using CopyHere(file, options)
|
||||||
|
$commands = $fontFiles |
|
||||||
|
% { Join-Path $fontsFolder.Self.Path $_.Name } |
|
||||||
|
? { Test-Path $_ } |
|
||||||
|
% { "Remove-SingleFont '$_' -Force;" }
|
||||||
|
|
||||||
|
# http://blogs.technet.com/b/deploymentguys/archive/2010/12/04/adding-and-removing-fonts-with-windows-powershell.aspx
|
||||||
|
$fontFiles |
|
||||||
|
% { $commands += "Add-SingleFont '$($_.FullName)';" }
|
||||||
|
|
||||||
|
$toExecute = ". $fontHelpersPath;" + ($commands -join ';')
|
||||||
|
Start-ChocolateyProcessAsAdmin $toExecute
|
||||||
|
|
||||||
Remove-Item $destination -Recurse
|
Remove-Item $destination -Recurse
|
||||||
|
|
||||||
|
523
core/FontHelpers.ps1
Normal file
523
core/FontHelpers.ps1
Normal file
@@ -0,0 +1,523 @@
|
|||||||
|
#########################################################################################
|
||||||
|
# MICROSOFT LEGAL STATEMENT FOR SAMPLE SCRIPTS/CODE
|
||||||
|
#########################################################################################
|
||||||
|
# This Sample Code is provided for the purpose of illustration only and is not
|
||||||
|
# intended to be used in a production environment.
|
||||||
|
#
|
||||||
|
# THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY
|
||||||
|
# OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
|
||||||
|
# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# We grant You a nonexclusive, royalty-free right to use and modify the Sample Code
|
||||||
|
# and to reproduce and distribute the object code form of the Sample Code, provided
|
||||||
|
# that You agree:
|
||||||
|
# (i) to not use Our name, logo, or trademarks to market Your software product
|
||||||
|
# in which the Sample Code is embedded;
|
||||||
|
# (ii) to include a valid copyright notice on Your software product in which
|
||||||
|
# the Sample Code is embedded; and
|
||||||
|
# (iii) to indemnify, hold harmless, and defend Us and Our suppliers from and
|
||||||
|
# against any claims or lawsuits, including attorneys’ fees, that arise
|
||||||
|
# or result from the use or distribution of the Sample Code.
|
||||||
|
#########################################################################################
|
||||||
|
|
||||||
|
#******************************************************************************
|
||||||
|
# File: FontHelpers.ps1 - derived from Add-Font.ps1 / Remove-Font.ps1
|
||||||
|
# Url : http://blogs.technet.com/b/deploymentguys/archive/2010/12/04/adding-and-removing-fonts-with-windows-powershell.aspx
|
||||||
|
# Date: 09/22/2010
|
||||||
|
# Version: 1.0.0
|
||||||
|
#
|
||||||
|
# Purpose: PowerShell script to install Windows fonts.
|
||||||
|
#
|
||||||
|
# Usage: Add-Font -help | -path "<Font file or folder path>"
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010 Microsoft Corporation
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Revisions:
|
||||||
|
# ----------
|
||||||
|
# 1.0.0 09/22/2010 Created script.
|
||||||
|
#
|
||||||
|
#******************************************************************************
|
||||||
|
|
||||||
|
#requires -Version 2.0
|
||||||
|
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Declare Global Variables and Constants
|
||||||
|
#*******************************************************************
|
||||||
|
|
||||||
|
# Define constants
|
||||||
|
set-variable CSIDL_FONTS 0x14 -option constant
|
||||||
|
|
||||||
|
# Create hashtable containing valid font file extensions and text to append to Registry entry name.
|
||||||
|
$hashFontFileTypes = @{}
|
||||||
|
$hashFontFileTypes.Add(".fon", "")
|
||||||
|
$hashFontFileTypes.Add(".fnt", "")
|
||||||
|
$hashFontFileTypes.Add(".ttf", " (TrueType)")
|
||||||
|
$hashFontFileTypes.Add(".ttc", " (TrueType)")
|
||||||
|
$hashFontFileTypes.Add(".otf", " (OpenType)")
|
||||||
|
# Type 1 fonts require handling multiple resource files.
|
||||||
|
# Not supported in this script
|
||||||
|
#$hashFontFileTypes.Add(".mmm", "")
|
||||||
|
#$hashFontFileTypes.Add(".pbf", "")
|
||||||
|
#$hashFontFileTypes.Add(".pfm", "")
|
||||||
|
|
||||||
|
# Initialize variables
|
||||||
|
$invocation = (Get-Variable MyInvocation -Scope 0).Value
|
||||||
|
$scriptPath = Split-Path $Invocation.MyCommand.Path
|
||||||
|
$fontRegistryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
|
||||||
|
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Load C# code
|
||||||
|
#*******************************************************************
|
||||||
|
$fontCSharpCode = @'
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace FontResource
|
||||||
|
{
|
||||||
|
public class AddRemoveFonts
|
||||||
|
{
|
||||||
|
private static IntPtr HWND_BROADCAST = new IntPtr(0xffff);
|
||||||
|
private static IntPtr HWND_TOP = new IntPtr(0);
|
||||||
|
private static IntPtr HWND_BOTTOM = new IntPtr(1);
|
||||||
|
private static IntPtr HWND_TOPMOST = new IntPtr(-1);
|
||||||
|
private static IntPtr HWND_NOTOPMOST = new IntPtr(-2);
|
||||||
|
private static IntPtr HWND_MESSAGE = new IntPtr(-3);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
static extern int AddFontResource(string lpFilename);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
static extern int RemoveFontResource(string lpFileName);
|
||||||
|
|
||||||
|
[DllImport("user32.dll",CharSet=CharSet.Auto)]
|
||||||
|
private static extern int SendMessage(IntPtr hWnd, WM wMsg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern bool PostMessage(IntPtr hWnd, WM Msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
public static int AddFont(string fontFilePath) {
|
||||||
|
FileInfo fontFile = new FileInfo(fontFilePath);
|
||||||
|
if (!fontFile.Exists)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int retVal = AddFontResource(fontFilePath);
|
||||||
|
|
||||||
|
//This version of SendMessage is a blocking call until all windows respond.
|
||||||
|
//long result = SendMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
|
||||||
|
|
||||||
|
//Alternatively PostMessage instead of SendMessage to prevent application hang
|
||||||
|
bool posted = PostMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int RemoveFont(string fontFileName) {
|
||||||
|
//FileInfo fontFile = new FileInfo(fontFileName);
|
||||||
|
//if (!fontFile.Exists)
|
||||||
|
//{
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int retVal = RemoveFontResource(fontFileName);
|
||||||
|
|
||||||
|
//This version of SendMessage is a blocking call until all windows respond.
|
||||||
|
//long result = SendMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
|
||||||
|
|
||||||
|
//Alternatively PostMessage instead of SendMessage to prevent application hang
|
||||||
|
bool posted = PostMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum WM : uint
|
||||||
|
{
|
||||||
|
NULL = 0x0000,
|
||||||
|
CREATE = 0x0001,
|
||||||
|
DESTROY = 0x0002,
|
||||||
|
MOVE = 0x0003,
|
||||||
|
SIZE = 0x0005,
|
||||||
|
ACTIVATE = 0x0006,
|
||||||
|
SETFOCUS = 0x0007,
|
||||||
|
KILLFOCUS = 0x0008,
|
||||||
|
ENABLE = 0x000A,
|
||||||
|
SETREDRAW = 0x000B,
|
||||||
|
SETTEXT = 0x000C,
|
||||||
|
GETTEXT = 0x000D,
|
||||||
|
GETTEXTLENGTH = 0x000E,
|
||||||
|
PAINT = 0x000F,
|
||||||
|
CLOSE = 0x0010,
|
||||||
|
QUERYENDSESSION = 0x0011,
|
||||||
|
QUERYOPEN = 0x0013,
|
||||||
|
ENDSESSION = 0x0016,
|
||||||
|
QUIT = 0x0012,
|
||||||
|
ERASEBKGND = 0x0014,
|
||||||
|
SYSCOLORCHANGE = 0x0015,
|
||||||
|
SHOWWINDOW = 0x0018,
|
||||||
|
WININICHANGE = 0x001A,
|
||||||
|
SETTINGCHANGE = WM.WININICHANGE,
|
||||||
|
DEVMODECHANGE = 0x001B,
|
||||||
|
ACTIVATEAPP = 0x001C,
|
||||||
|
FONTCHANGE = 0x001D,
|
||||||
|
TIMECHANGE = 0x001E,
|
||||||
|
CANCELMODE = 0x001F,
|
||||||
|
SETCURSOR = 0x0020,
|
||||||
|
MOUSEACTIVATE = 0x0021,
|
||||||
|
CHILDACTIVATE = 0x0022,
|
||||||
|
QUEUESYNC = 0x0023,
|
||||||
|
GETMINMAXINFO = 0x0024,
|
||||||
|
PAINTICON = 0x0026,
|
||||||
|
ICONERASEBKGND = 0x0027,
|
||||||
|
NEXTDLGCTL = 0x0028,
|
||||||
|
SPOOLERSTATUS = 0x002A,
|
||||||
|
DRAWITEM = 0x002B,
|
||||||
|
MEASUREITEM = 0x002C,
|
||||||
|
DELETEITEM = 0x002D,
|
||||||
|
VKEYTOITEM = 0x002E,
|
||||||
|
CHARTOITEM = 0x002F,
|
||||||
|
SETFONT = 0x0030,
|
||||||
|
GETFONT = 0x0031,
|
||||||
|
SETHOTKEY = 0x0032,
|
||||||
|
GETHOTKEY = 0x0033,
|
||||||
|
QUERYDRAGICON = 0x0037,
|
||||||
|
COMPAREITEM = 0x0039,
|
||||||
|
GETOBJECT = 0x003D,
|
||||||
|
COMPACTING = 0x0041,
|
||||||
|
COMMNOTIFY = 0x0044,
|
||||||
|
WINDOWPOSCHANGING = 0x0046,
|
||||||
|
WINDOWPOSCHANGED = 0x0047,
|
||||||
|
POWER = 0x0048,
|
||||||
|
COPYDATA = 0x004A,
|
||||||
|
CANCELJOURNAL = 0x004B,
|
||||||
|
NOTIFY = 0x004E,
|
||||||
|
INPUTLANGCHANGEREQUEST = 0x0050,
|
||||||
|
INPUTLANGCHANGE = 0x0051,
|
||||||
|
TCARD = 0x0052,
|
||||||
|
HELP = 0x0053,
|
||||||
|
USERCHANGED = 0x0054,
|
||||||
|
NOTIFYFORMAT = 0x0055,
|
||||||
|
CONTEXTMENU = 0x007B,
|
||||||
|
STYLECHANGING = 0x007C,
|
||||||
|
STYLECHANGED = 0x007D,
|
||||||
|
DISPLAYCHANGE = 0x007E,
|
||||||
|
GETICON = 0x007F,
|
||||||
|
SETICON = 0x0080,
|
||||||
|
NCCREATE = 0x0081,
|
||||||
|
NCDESTROY = 0x0082,
|
||||||
|
NCCALCSIZE = 0x0083,
|
||||||
|
NCHITTEST = 0x0084,
|
||||||
|
NCPAINT = 0x0085,
|
||||||
|
NCACTIVATE = 0x0086,
|
||||||
|
GETDLGCODE = 0x0087,
|
||||||
|
SYNCPAINT = 0x0088,
|
||||||
|
NCMOUSEMOVE = 0x00A0,
|
||||||
|
NCLBUTTONDOWN = 0x00A1,
|
||||||
|
NCLBUTTONUP = 0x00A2,
|
||||||
|
NCLBUTTONDBLCLK = 0x00A3,
|
||||||
|
NCRBUTTONDOWN = 0x00A4,
|
||||||
|
NCRBUTTONUP = 0x00A5,
|
||||||
|
NCRBUTTONDBLCLK = 0x00A6,
|
||||||
|
NCMBUTTONDOWN = 0x00A7,
|
||||||
|
NCMBUTTONUP = 0x00A8,
|
||||||
|
NCMBUTTONDBLCLK = 0x00A9,
|
||||||
|
NCXBUTTONDOWN = 0x00AB,
|
||||||
|
NCXBUTTONUP = 0x00AC,
|
||||||
|
NCXBUTTONDBLCLK = 0x00AD,
|
||||||
|
INPUT_DEVICE_CHANGE = 0x00FE,
|
||||||
|
INPUT = 0x00FF,
|
||||||
|
KEYFIRST = 0x0100,
|
||||||
|
KEYDOWN = 0x0100,
|
||||||
|
KEYUP = 0x0101,
|
||||||
|
CHAR = 0x0102,
|
||||||
|
DEADCHAR = 0x0103,
|
||||||
|
SYSKEYDOWN = 0x0104,
|
||||||
|
SYSKEYUP = 0x0105,
|
||||||
|
SYSCHAR = 0x0106,
|
||||||
|
SYSDEADCHAR = 0x0107,
|
||||||
|
UNICHAR = 0x0109,
|
||||||
|
KEYLAST = 0x0109,
|
||||||
|
IME_STARTCOMPOSITION = 0x010D,
|
||||||
|
IME_ENDCOMPOSITION = 0x010E,
|
||||||
|
IME_COMPOSITION = 0x010F,
|
||||||
|
IME_KEYLAST = 0x010F,
|
||||||
|
INITDIALOG = 0x0110,
|
||||||
|
COMMAND = 0x0111,
|
||||||
|
SYSCOMMAND = 0x0112,
|
||||||
|
TIMER = 0x0113,
|
||||||
|
HSCROLL = 0x0114,
|
||||||
|
VSCROLL = 0x0115,
|
||||||
|
INITMENU = 0x0116,
|
||||||
|
INITMENUPOPUP = 0x0117,
|
||||||
|
MENUSELECT = 0x011F,
|
||||||
|
MENUCHAR = 0x0120,
|
||||||
|
ENTERIDLE = 0x0121,
|
||||||
|
MENURBUTTONUP = 0x0122,
|
||||||
|
MENUDRAG = 0x0123,
|
||||||
|
MENUGETOBJECT = 0x0124,
|
||||||
|
UNINITMENUPOPUP = 0x0125,
|
||||||
|
MENUCOMMAND = 0x0126,
|
||||||
|
CHANGEUISTATE = 0x0127,
|
||||||
|
UPDATEUISTATE = 0x0128,
|
||||||
|
QUERYUISTATE = 0x0129,
|
||||||
|
CTLCOLORMSGBOX = 0x0132,
|
||||||
|
CTLCOLOREDIT = 0x0133,
|
||||||
|
CTLCOLORLISTBOX = 0x0134,
|
||||||
|
CTLCOLORBTN = 0x0135,
|
||||||
|
CTLCOLORDLG = 0x0136,
|
||||||
|
CTLCOLORSCROLLBAR = 0x0137,
|
||||||
|
CTLCOLORSTATIC = 0x0138,
|
||||||
|
MOUSEFIRST = 0x0200,
|
||||||
|
MOUSEMOVE = 0x0200,
|
||||||
|
LBUTTONDOWN = 0x0201,
|
||||||
|
LBUTTONUP = 0x0202,
|
||||||
|
LBUTTONDBLCLK = 0x0203,
|
||||||
|
RBUTTONDOWN = 0x0204,
|
||||||
|
RBUTTONUP = 0x0205,
|
||||||
|
RBUTTONDBLCLK = 0x0206,
|
||||||
|
MBUTTONDOWN = 0x0207,
|
||||||
|
MBUTTONUP = 0x0208,
|
||||||
|
MBUTTONDBLCLK = 0x0209,
|
||||||
|
MOUSEWHEEL = 0x020A,
|
||||||
|
XBUTTONDOWN = 0x020B,
|
||||||
|
XBUTTONUP = 0x020C,
|
||||||
|
XBUTTONDBLCLK = 0x020D,
|
||||||
|
MOUSEHWHEEL = 0x020E,
|
||||||
|
MOUSELAST = 0x020E,
|
||||||
|
PARENTNOTIFY = 0x0210,
|
||||||
|
ENTERMENULOOP = 0x0211,
|
||||||
|
EXITMENULOOP = 0x0212,
|
||||||
|
NEXTMENU = 0x0213,
|
||||||
|
SIZING = 0x0214,
|
||||||
|
CAPTURECHANGED = 0x0215,
|
||||||
|
MOVING = 0x0216,
|
||||||
|
POWERBROADCAST = 0x0218,
|
||||||
|
DEVICECHANGE = 0x0219,
|
||||||
|
MDICREATE = 0x0220,
|
||||||
|
MDIDESTROY = 0x0221,
|
||||||
|
MDIACTIVATE = 0x0222,
|
||||||
|
MDIRESTORE = 0x0223,
|
||||||
|
MDINEXT = 0x0224,
|
||||||
|
MDIMAXIMIZE = 0x0225,
|
||||||
|
MDITILE = 0x0226,
|
||||||
|
MDICASCADE = 0x0227,
|
||||||
|
MDIICONARRANGE = 0x0228,
|
||||||
|
MDIGETACTIVE = 0x0229,
|
||||||
|
MDISETMENU = 0x0230,
|
||||||
|
ENTERSIZEMOVE = 0x0231,
|
||||||
|
EXITSIZEMOVE = 0x0232,
|
||||||
|
DROPFILES = 0x0233,
|
||||||
|
MDIREFRESHMENU = 0x0234,
|
||||||
|
IME_SETCONTEXT = 0x0281,
|
||||||
|
IME_NOTIFY = 0x0282,
|
||||||
|
IME_CONTROL = 0x0283,
|
||||||
|
IME_COMPOSITIONFULL = 0x0284,
|
||||||
|
IME_SELECT = 0x0285,
|
||||||
|
IME_CHAR = 0x0286,
|
||||||
|
IME_REQUEST = 0x0288,
|
||||||
|
IME_KEYDOWN = 0x0290,
|
||||||
|
IME_KEYUP = 0x0291,
|
||||||
|
MOUSEHOVER = 0x02A1,
|
||||||
|
MOUSELEAVE = 0x02A3,
|
||||||
|
NCMOUSEHOVER = 0x02A0,
|
||||||
|
NCMOUSELEAVE = 0x02A2,
|
||||||
|
WTSSESSION_CHANGE = 0x02B1,
|
||||||
|
TABLET_FIRST = 0x02c0,
|
||||||
|
TABLET_LAST = 0x02df,
|
||||||
|
CUT = 0x0300,
|
||||||
|
COPY = 0x0301,
|
||||||
|
PASTE = 0x0302,
|
||||||
|
CLEAR = 0x0303,
|
||||||
|
UNDO = 0x0304,
|
||||||
|
RENDERFORMAT = 0x0305,
|
||||||
|
RENDERALLFORMATS = 0x0306,
|
||||||
|
DESTROYCLIPBOARD = 0x0307,
|
||||||
|
DRAWCLIPBOARD = 0x0308,
|
||||||
|
PAINTCLIPBOARD = 0x0309,
|
||||||
|
VSCROLLCLIPBOARD = 0x030A,
|
||||||
|
SIZECLIPBOARD = 0x030B,
|
||||||
|
ASKCBFORMATNAME = 0x030C,
|
||||||
|
CHANGECBCHAIN = 0x030D,
|
||||||
|
HSCROLLCLIPBOARD = 0x030E,
|
||||||
|
QUERYNEWPALETTE = 0x030F,
|
||||||
|
PALETTEISCHANGING = 0x0310,
|
||||||
|
PALETTECHANGED = 0x0311,
|
||||||
|
HOTKEY = 0x0312,
|
||||||
|
PRINT = 0x0317,
|
||||||
|
PRINTCLIENT = 0x0318,
|
||||||
|
APPCOMMAND = 0x0319,
|
||||||
|
THEMECHANGED = 0x031A,
|
||||||
|
CLIPBOARDUPDATE = 0x031D,
|
||||||
|
DWMCOMPOSITIONCHANGED = 0x031E,
|
||||||
|
DWMNCRENDERINGCHANGED = 0x031F,
|
||||||
|
DWMCOLORIZATIONCOLORCHANGED = 0x0320,
|
||||||
|
DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
|
||||||
|
GETTITLEBARINFOEX = 0x033F,
|
||||||
|
HANDHELDFIRST = 0x0358,
|
||||||
|
HANDHELDLAST = 0x035F,
|
||||||
|
AFXFIRST = 0x0360,
|
||||||
|
AFXLAST = 0x037F,
|
||||||
|
PENWINFIRST = 0x0380,
|
||||||
|
PENWINLAST = 0x038F,
|
||||||
|
APP = 0x8000,
|
||||||
|
USER = 0x0400,
|
||||||
|
CPL_LAUNCH = USER+0x1000,
|
||||||
|
CPL_LAUNCHED = USER+0x1001,
|
||||||
|
SYSTIMER = 0x118
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'@
|
||||||
|
Add-Type $fontCSharpCode
|
||||||
|
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Declare Functions
|
||||||
|
#*******************************************************************
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Function Get-SpecialFolder()
|
||||||
|
#
|
||||||
|
# Purpose: Convert a CSIDL string to a folder parh string
|
||||||
|
#
|
||||||
|
# Input: $id CSIDL folder identifier string
|
||||||
|
#
|
||||||
|
# Returns: Folder path
|
||||||
|
#
|
||||||
|
#*******************************************************************
|
||||||
|
function Get-SpecialFolder($id)
|
||||||
|
{
|
||||||
|
$shell = New-Object –COM "Shell.Application"
|
||||||
|
$folder = $shell.NameSpace($id)
|
||||||
|
$specialFolder = $folder.Self.Path
|
||||||
|
$specialFolder
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Function Add-SingleFont()
|
||||||
|
#
|
||||||
|
# Purpose: Install a font file
|
||||||
|
#
|
||||||
|
# Input: $file Font file path
|
||||||
|
#
|
||||||
|
# Returns: 0 - success, 1 - failure
|
||||||
|
#
|
||||||
|
#*******************************************************************
|
||||||
|
function Add-SingleFont($filePath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
[string]$filePath = (resolve-path $filePath).path
|
||||||
|
[string]$fileDir = split-path $filePath
|
||||||
|
[string]$fileName = split-path $filePath -leaf
|
||||||
|
[string]$fileExt = (Get-Item $filePath).extension
|
||||||
|
[string]$fileBaseName = $fileName -replace($fileExt ,"")
|
||||||
|
|
||||||
|
$shell = new-object -com shell.application
|
||||||
|
$myFolder = $shell.Namespace($fileDir)
|
||||||
|
$fileobj = $myFolder.Items().Item($fileName)
|
||||||
|
$fontName = $myFolder.GetDetailsOf($fileobj,21)
|
||||||
|
|
||||||
|
if ($fontName -eq "") { $fontName = $fileBaseName }
|
||||||
|
|
||||||
|
copy-item $filePath -destination $fontsFolderPath
|
||||||
|
|
||||||
|
$fontFinalPath = Join-Path $fontsFolderPath $fileName
|
||||||
|
$retVal = [FontResource.AddRemoveFonts]::AddFont($fontFinalPath)
|
||||||
|
|
||||||
|
if ($retVal -eq 0) {
|
||||||
|
Write-Host "Font $($filePath) installation failed"
|
||||||
|
Write-Host ""
|
||||||
|
1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "Font $($filePath) installed successfully"
|
||||||
|
Write-Host ""
|
||||||
|
Set-ItemProperty -path "$($fontRegistryPath)" -name "$($fontName)$($hashFontFileTypes.item($fileExt))" -value "$($fileName)" -type STRING
|
||||||
|
0
|
||||||
|
}
|
||||||
|
""
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Write-Host "An error occured installing $($filePath)"
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$($error[0].ToString())"
|
||||||
|
Write-Host ""
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Function Remove-SingleFont()
|
||||||
|
#
|
||||||
|
# Purpose: Uninstall a font file
|
||||||
|
#
|
||||||
|
# Input: $file Font file name
|
||||||
|
#
|
||||||
|
# Returns: 0 - success, 1 - failure
|
||||||
|
#
|
||||||
|
#*******************************************************************
|
||||||
|
function Remove-SingleFont($file)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$fontFinalPath = Join-Path $fontsFolderPath $file
|
||||||
|
$retVal = [FontResource.AddRemoveFonts]::RemoveFont($fontFinalPath)
|
||||||
|
if ($retVal -eq 0) {
|
||||||
|
Write-Host "Font $($file) removal failed"
|
||||||
|
Write-Host ""
|
||||||
|
1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$fontRegistryvaluename = (Get-RegistryStringNameFromValue $fontRegistryPath $file)
|
||||||
|
if ($fontRegistryvaluename -ne "")
|
||||||
|
{
|
||||||
|
Remove-ItemProperty -path $fontRegistryPath -name $fontRegistryvaluename
|
||||||
|
}
|
||||||
|
remove-item $fontFinalPath
|
||||||
|
Write-Host "$($error[0].ToString())"
|
||||||
|
Write-Host "Font $($file) removed successfully"
|
||||||
|
Write-Host ""
|
||||||
|
0
|
||||||
|
}
|
||||||
|
""
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Write-Host "An error occured removing $($file)"
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$($error[0].ToString())"
|
||||||
|
Write-Host ""
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#*******************************************************************
|
||||||
|
# Main Script
|
||||||
|
#*******************************************************************
|
||||||
|
|
||||||
|
$fontsFolderPath = Get-SpecialFolder($CSIDL_FONTS)
|
Reference in New Issue
Block a user