Я работал над этим время от времени несколько дней, чтобы добраться до этой точки, но теперь я чувствую, что в конце. Я пытаюсь заставить vscode увидеть мой шрифт, который я не имею прав для установки.
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
public static class Font
{
public const UInt32 WM_FONTCHANGE = 0x001D;
public static IntPtr HWND_BROADCAST = new IntPtr(0xFFFF);
[DllImport("gdi32.dll", EntryPoint="AddFontResourceW", CharSet=CharSet.Unicode)]
public static extern int AddFontResource(
[MarshalAs(UnmanagedType.LPWStr)]
string filePath);
[DllImport("user32.dll", EntryPoint="SendMessageW", SetLastError=true)]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
}
'@
# skip the invisible windows
$code = (Get-Process -Name code).Where{$_.MainWindowHandle}.MainWindowHandle
Get-ChildItem -Path '/myfonts/*.ttf' | ForEach-Object {
if ([Font]::AddFontResource($_.FullName)) {
$null = [Font]::SendMessage($code, [Font]::WM_FONTCHANGE, 0, 0)
[System.ComponentModel.Win32Exception]::new(
[System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
).Message
}
else {
Write-Warning -Message "$($_.BaseName) failed to import."
}
}
Раньше я пытался вещать, но у меня нет прав администратора иЯ думаю, что он пытался транслировать на окна с общими ресурсами (виртуальная среда), поэтому окно просто зависало.Это привело меня к попыткам нацелиться только на vscode и посмотреть, сработает ли это.