Change “Windows font size (DPI)” in PowerShell?

后端 未结 7 1983
别那么骄傲
别那么骄傲 2020-12-08 17:20

I\'m using a laptop at office (Windows 7) with a station and double screen and at home without station.

The point is I have to change text size each time I switch fr

相关标签:
7条回答
  • 2020-12-08 17:46

    After much time, I can't find anything in google. Well, I made my own script:

    $perfis = (Get-ChildItem Registry::HKEY_USERS\ | Where-Object {$_.Name -match "S-1"} | ForEach-Object {Get-ItemProperty "Registry::$_\Control Panel\Desktop" -Name "Win8DpiScaling" -ErrorAction SilentlyContinue}).PSPath
    foreach ($_ in $perfis) {Set-ItemProperty -Path "Registry::$_" -Name "Win8DpiScaling" -Value 0}
    
    $monitores = (Get-ChildItem Registry::HKEY_USERS\ | Where-Object {$_.Name -match "S-1"} | ForEach-Object {Get-ChildItem "Registry::$_\Control Panel\Desktop\PerMonitorSettings" -ErrorAction SilentlyContinue}).PSPath
    foreach ($_ in $monitores) {Set-ItemProperty -Path "Registry::$_" -Name "DpiValue" -Value 0}
    
    0 讨论(0)
  • 2020-12-08 17:48

    Apparently you can set the LogPixels property of

    HKLM:/Software/Microsoft/Windows NT/CurrentVersion/FontDPI
    

    which is reiterated in a lot of places around the net. However, I got the impression that dpi was a user setting which makes no sense to have under HKLM.

    0 讨论(0)
  • 2020-12-08 17:57

    These simple steps worked for me:

    1. Download Win7AndW2K8R2-KB3191566-x64.ZIP from https://docs.microsoft.com/en-us/powershell/wmf/5.1/install-configure

    2. Unzip the file in tmp folder

    3. Open a Powershell command window as Administrator, go in tmp folder where file has been unzipped and execute the following commands :

      set-executionpolicy remotesigned .\Install-WMF5.1.ps1

    0 讨论(0)
  • 2020-12-08 18:03

    By comparing the output of Get-ItemProperty -Path 'HKCU:\Control Panel\Desktop' before and after using the Windows GUI to set the scaling level, I found the following properties needed setting; worked for me:

    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.'
    
    0 讨论(0)
  • 2020-12-08 18:04

    As supposed in the other answers, the setting under HKLM is not the correct place as the dpi scaling is a user defined setting. The correct registry key is HKCU:\Control Panel\Desktop with the value LogPixels.

    More information about all DPI-related registry settings can be found in DPI-related APIs and registry settings.

    I wrote a tiny PowerShell script that changes the DPI scaling depending on the current scaling and performs the user logoff, so I just have to execute the script when I put my device to a different monitor.

    cd 'HKCU:\Control Panel\Desktop'
    $val = Get-ItemProperty -Path . -Name "LogPixels"
    if($val.LogPixels -ne 96)
    {
        Write-Host 'Change to 100% / 96 dpi'
        Set-ItemProperty -Path . -Name LogPixels -Value 96
    } else {
        Write-Host 'Change to 150% / 144 dpi'
        Set-ItemProperty -Path . -Name LogPixels -Value 144
    }
    
    logoff;exit
    
    0 讨论(0)
  • 2020-12-08 18:04

    Sorry, I misread the question. I thought you wanted to control the PowerShell windows.

    As already mentioned you could set the LogPixels setting in the registry, to see what the current setting is, try this:

    Get-Item -Path Registry::'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI' | Select-Object -ExpandProperty Property
    

    If the LogPixels key is there it will show, you can create it if it does not exist:

    Set-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI\LogPixels'
    

    NB: You have to run this with privileges that allow you to manipulate the registry.

    There is a good introduction to this over at TechNet.

    0 讨论(0)
提交回复
热议问题