Windows 8.1中通过命令行进行DPI缩放


14

我想创建一个键盘快捷方式,以通过创建一个在检测到键盘快捷方式时运行的小宏来快速轻松地更改计算机上的DPI比例。

在Windows 8.1中,可以通过控制面板(如下图所示)设置桌面显示DPI比例,立即生效。或者,可以在注册表中手动设置缩放比例,但是这样做需要用户登录和注销或重新启动计算机才能生效(并且只能模仿“我所有显示的缩放比例”选项)。 。

如何通过命令行或以编程方式设置DPI标度?

http://puu.sh/93YLV.jpg


您是否尝试过更改注册表,杀死浏览器进程,然后再次启动它。因为那就是所有GUI方法在理论上都会做的事情。
拉姆猎犬,2014年

@Ramhound没有运气。GUI界面肯定在做一些刷新桌面的操作,以应用设置,但是我不确定什么,也一直找不到。
FThompson,2014年

您确定更改会立即进行吗?我收到一个对话框,提示“您必须注销计算机才能应用这些更改”
Vinayak 2014年

@Vinayak,由上述对话框应用后,更改将立即发生。我确实记得曾经读过,即时应用程序是标准Windows 8上Windows 8.1的新增功能,因此,如果您有兴趣研究机器与我的机器之间的差异,那可以作为一个起点。
FThompson

@Vulcan实际上,我正在使用Windows 8.1。但是,我试图在单击Let me choose one scaling level...复选框后进行更改,因为其上方的滑块在笔记本上为灰色。
Vinayak

Answers:


9

监视器独立缩放的正确注册表项是HKCU:\Control Panel\DesktopLogPixels。有关所有与DPI相关的注册表设置的更多信息,可以在这里找到:http : //technet.microsoft.com/zh-cn/library/dn528846.aspx#system对于每个显示器启用不同缩放比例的情况,也有一些信息。 。

我编写了一个微型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

我认为您可以根据TechNet文章的信息对其进行修改。


3
我很抱歉没有尽快做出回应;很好的解决方案!但是,不幸的是,LogPixels仅当选中“让我为所有显示选择一个缩放级别”复选框时,才使用该值,这是我自己弄乱注册表值时观察到的,但链接的Technet文章也对此进行了确认。另外,您的解决方案需要用户注销的警告。如果用户未注销并重新登录,则不会更新DPI。在这两个缺点之间,您的解决方案对我而言并不奏效,但是对所有+1都可以得到一个很好的答案。
FThompson,2015年

它在Windows 10上不起作用:(
kokbira,

3
为了使此功能在Windows 10中起作用,您需要将注册表项设置HKCU:\Control Panel\Desktop\Win8DpiScaling1。否则,它将使用默认的比例因子,并忽略中的值LogPixels
FlyingFoX

1
如果每台显示器的DPI比例尺都不同,而不是HKCU:\Control Panel\Desktop外观不同HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Shayan

1
还有这里HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
-Shayan

2

有PowerShell脚本可以更改屏幕分辨率,这可能会有所帮助。我不知道它所做的更改是否在Windows 8.1上立即生效,但是幸运的是,该脚本可能使用与控制面板小程序相同的API。

完整的Set-ScreenResolution.ps1脚本可在“ 脚本存储库”中找到,但在此处无法复制。

作者的描述可在文章中找到:
嗨,脚本专家!如何通过Windows PowerShell更改我的桌面监视器分辨率?

有关使用它的一些信息,请参见以下文章:
使用Powershell更改屏幕分辨率


这些资源看起来更倾向于更改屏幕分辨率,而不是DPI。我查看了您提供的链接,但只看到用于设置宽度和高度的选项,没有提及DPI。我误会了你的答案吗?
FThompson

更改分辨率将更改DPI,反之亦然。您可以找出不同DPI设置下的屏幕分辨率,然后使用上面的脚本更改为这些分辨率。
harrymc

1
虽然更改分辨率确实会更改DPI,但它与Win8中提供的DPI缩放比例并不完全相同(也许在其他操作系统上有所不同吗?)的一个示例是,无论DPI缩放比例设置为什么,桌面并且其图标的大小和外观始终相同,而如果更改​​分辨率,则桌面及其图标的大小也会相应更改。
FThompson

这是由于Windows 8.1中引入了新的DPI感知技术。我无法找到有关其API的任何信息-当前仅注册表设置可用,这不是您要查找的内容。
harrymc

资源管理器支持DPI,因此桌面图标保持其大小,但其他程序很少。对于大多数产品,更改分辨率与更改DPI一样好。
harrymc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.