更改Windows 10字体和缩放设置

时间:2019-05-31 15:47:11

标签: .net powershell fonts size windows-10-desktop

我们的团队正在分发Windows 10,该Windows 10的某些功能已锁定,但我们提供了一些自动化功能,其中一项是更改屏幕分辨率。我被要求添加以下功能:更改显示设置,放大文本放大所有内容

我遇到的唯一解决方案是重写注册表项,然后注销然后再重新启动。另外,我看到的唯一解决方案是使用PowerShell或CMD。我目前正在使用.NET

那么我的问题是:

  • 有没有更好的方法?注册表更改很容易,但是我不想强迫用户注销。
  • 无论如何,我宁愿在.NET中执行此操作,所以想知道是否有人可以将我指向现有的代码示例,或者提供一个示例。

示例1

@echo off
reg add "HKCU\Control Panel\Desktop" /v LogPixels /t reg_dword /d 144
exit /b

示例2

cd 'HKCU:\Control Panel\Desktop'
Set-ItemProperty -Path . -Name LogPixels -Value 144
Set-ItemProperty -Path . -Name Win8DpiScaling -Value 1
Set-ItemProperty -Path . -Name FocusBorderHeight -Value 2
Set-ItemProperty -Path . -Name FocusBorderWidth -Value 2
Write-Host 'Sign out and sign back in again to see changes.

1 个答案:

答案 0 :(得分:0)

未经测试的设置更改,但您可以尝试以下功能

function Refresh-Explorer {
    [CmdletBinding()]
    Param()

    $code = @'
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff); 
private const int WM_SETTINGCHANGE = 0x1a; 
private const int SMTO_ABORTIFHUNG = 0x0002; 

[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam);

[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
private static extern IntPtr SendMessageTimeout ( IntPtr hWnd, int Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult ); 

[System.Runtime.InteropServices.DllImport("Shell32.dll")] 
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);

public static void Refresh() {
    SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 3000, IntPtr.Zero); 
}
'@

    Add-Type -MemberDefinition $code -Namespace MyWinAPI -Name Explorer 
    [MyWinAPI.Explorer]::Refresh()
}