在PowerShell中更改"Windows字体大小(DPI)"?

Lau*_*ron 10 powershell automation windows-7

我在办公室(Windows 7)使用笔记本电脑,有一个电台和双屏,在家里没有电台.

关键是我每次从工作站切换到笔记本电脑时都必须更改文本大小,因为我的双屏幕上的文字大小太大,但笔记本电脑屏幕上的文字太小.

要继续:我右键单击桌面屏幕,选择更改分辨率然后"获取更大或更小的文本和其他元素"以选择100%,125%等...我需要重新启动会话以获取应用的设置.(注意:我使用的是法语系统,并且我认为文本在我们的版本上并不完全相同).

它不是很方便,所以我想自动化这个,也许是使用PowerShell脚本.

理想情况下,脚本可以检测我是单独使用笔记本电脑还是使用两个屏幕的电台.另外,没有会话重启(我怀疑最后一点是可行的).

我该如何开始?如果这是可能的.

Tor*_*mme 10

正如其他答案所假设的那样,HKLM下的设置不正确,因为dpi缩放是用户定义的设置.正确的注册表项HKCU:\Control Panel\Desktop与值LogPixels.

有关所有与DPI相关的注册表设置的详细信息,请参阅与DPI相关的API和注册表设置.

我写了一个小的PowerShell脚本,根据当前的缩放更改DPI缩放并执行用户注销,所以我只需要在将设备放到不同的监视器时执行脚本.

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
Run Code Online (Sandbox Code Playgroud)


nev*_*ath 10

这是我发现的最简单的方法。我稍微修改了提供的函数,因此它很容易复制/粘贴。它不需要任何注册表调用或任何东西。简单且非常有效。

你可以这样称呼它

function Set-Scaling {
    # Posted by IanXue-MSFT on
    # https://learn.microsoft.com/en-us/answers/questions/197944/batch-file-or-tool-like-powertoy-to-change-the-res.html
    # $scaling = 0 : 100% (default)
    # $scaling = 1 : 125% 
    # $scaling = 2 : 150% 
    # $scaling = 3 : 175% 
    param($scaling)
    $source = @'
    [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
    public static extern bool SystemParametersInfo(
                      uint uiAction,
                      uint uiParam,
                      uint pvParam,
                      uint fWinIni);
'@
    $apicall = Add-Type -MemberDefinition $source -Name WinAPICall -Namespace SystemParamInfo -PassThru
    $apicall::SystemParametersInfo(0x009F, $scaling, $null, 1) | Out-Null
}

Set-Scaling -scaling 0

Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 5

显然你可以设置LogPixels属性

HKLM:/Software/Microsoft/Windows NT/CurrentVersion/FontDPI
Run Code Online (Sandbox Code Playgroud)

这在网络上很多地方都得到了重申。然而,我的印象是 dpi 是一个用户设置,在 HKLM 下没有任何意义。


Yoo*_*kim 3

抱歉,我看错问题了。我以为你想控制 PowerShell 窗口。

正如已经提到的,您可以在注册表中设置 LogPixels 设置,要查看当前设置是什么,请尝试以下操作:

Get-Item -Path Registry::'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI' | Select-Object -ExpandProperty Property
Run Code Online (Sandbox Code Playgroud)

如果 LogPixels 键存在,它将显示,如果不存在,您可以创建它:

Set-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI\LogPixels'
Run Code Online (Sandbox Code Playgroud)

注意:您必须使用允许操作注册表的权限来运行此程序。

TechNet 对此有很好的介绍。