Script to setup Windows 10 1903
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

118 lines
3.2 KiB

<#
.SYNOPSIS
Set console font to Consolas when script is called from the Wrapper due to it is not loaded by default
.LINK
https://github.com/ReneNyffenegger/ps-modules-console
#>
function Set-ConsoleFont
{
$Signature = @{
Namespace = "WinAPI"
Name = "ConsoleFont"
Language = "CSharp"
MemberDefinition = @"
[StructLayout(LayoutKind.Sequential)]
public struct COORD
{
public short X;
public short Y;
public COORD(short x, short y)
{
X = x;
Y = y;
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CONSOLE_FONT_INFOEX
{
public uint cbSize;
public uint n;
public COORD size;
// The four low-order bits of 'family' specify information about the pitch and the technology:
// 1 = TMPF_FIXED_PITCH, 2 = TMPF_VECTOR, 4 = TMPF_TRUETYPE, 8 = TMPF_DEVICE.
// The four high-order bits specifies the fonts family:
// 80 = FF_DECORATIVE, 0 = FF_DONTCARE, 48 = FF_MODERN, 16 = FF_ROMAN, 64 = FF_SCRIPT, 32 = FF_SWISS
// I assume(!) this value is always 48.
// (In fact, it seems that family is is always 54 = TMPF_VECTOR + TMPF_TRUETYPE + FF_MODERN)
public int family;
public int weight;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name;
}
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
extern static bool GetCurrentConsoleFontEx(
IntPtr hConsoleOutput,
bool bMaximumWindow,
ref CONSOLE_FONT_INFOEX lpConsoleCurrentFont
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern Int32 SetCurrentConsoleFontEx(
IntPtr ConsoleOutput,
bool MaximumWindow,
ref CONSOLE_FONT_INFOEX lpConsoleCurrentFont
);
public static CONSOLE_FONT_INFOEX GetFont()
{
CONSOLE_FONT_INFOEX ret = new CONSOLE_FONT_INFOEX();
ret.cbSize = (uint) Marshal.SizeOf(ret);
if (GetCurrentConsoleFontEx(GetStdHandle(-11), false, ref ret))
{
return ret;
}
throw new Exception("something went wrong with GetCurrentConsoleFontEx");
}
public static void SetFont(CONSOLE_FONT_INFOEX font)
{
if (SetCurrentConsoleFontEx(GetStdHandle(-11), false, ref font ) == 0)
{
throw new Exception("something went wrong with SetCurrentConsoleFontEx");
}
}
public static void SetSize(short w, short h)
{
CONSOLE_FONT_INFOEX font = GetFont();
font.size.X = w;
font.size.Y = h;
SetFont(font);
}
public static void SetName(string name)
{
CONSOLE_FONT_INFOEX font = GetFont();
font.name = name;
SetFont(font);
}
"@
}
if (-not ("WinAPI.ConsoleFont" -as [type]))
{
Add-Type @Signature
}
[WinAPI.ConsoleFont]::SetName("Consolas")
}
# We need to be sure that the Wrapper generated a powershell.exe process. If that true, we need to set Consolas font, unless a Sophia Script logo in console is distored
$PowerShellParentProcessId = (Get-CimInstance -ClassName CIM_Process | Where-Object -FilterScript {$_.Name -eq "powershell.exe"}).ParentProcessId
$ParrentProcess = Get-Process -Id $PowerShellParentProcessId -ErrorAction Ignore
$WrapperProcess = Get-Process -Name SophiaScriptWrapper -ErrorAction Ignore
if ($ParrentProcess.Id -eq $WrapperProcess.Id)
{
Set-ConsoleFont
}