Answers:
对于系统文件,“兼容性”选项卡是隐藏的,因此要复制“在高DPI设置上禁用显示比例缩放”复选框的功能,可以将以下内容添加到注册表中:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
这具有使组策略编辑器之类的所有MMC管理单元也使用本机缩放而不是模糊的光栅化版本的附加好处。
您可以将该文件另存为.reg文件并导入,或使用以下命令将其粘贴到“运行”对话框中:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
如果您发现自己使用该替代方法,则通常需要将其添加到.exe文件的右键单击上下文菜单中。您也可以将其添加到.msi文件,因为这些文件也缺少“兼容性”选项卡:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
由于“以管理员身份运行”和“禁用DPI缩放”设置存储在一起,因此在已经设置为以admin身份运行的文件上调用该命令将清除该标志并改为设置DPI缩放标志。这只会影响您手动选中了该复选框的文件,而不影响清单中具有正确的requestExecutionLevel的文件。
仅供参考,当两者都选中时,字符串为“〜RUNASADMIN HIGHDPIAWARE”,但我不会将其放在上下文菜单选项中,因为它已经可以在上下文菜单中一次性使用,并且使它不是一个好主意。管理员令牌非常容易。
如果您希望该选项为特定文件夹中的可执行文件和安装程序文件禁用DPI缩放,则可以使用以下.reg导入:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
在根目录级别的文件夹(如“程序文件”)上使用该选项不是一个好主意,因为您将创建数百个注册表项。但是在某些情况下,这是必不可少的,尤其是对于Process Explorer和Sysinternals实用程序的其余部分或Nirsoft实用程序而言,所有这些程序都可以很好地运行,并且禁用了DPI缩放功能,但是在清单中未明确指定该选项。
最后一批代码使用内部启动命令使命令提示符窗口尽可能快地移开,并在解析文件夹内容时将其最小化。@符号用于防止在输出中回显命令,而nul重定向用于隐藏输出“操作成功完成”。因为每个条目都不会改变。
如果您碰巧拥有出色的nircmd工具,则可以完全隐藏命令提示符窗口的简短提示:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
如果nircmd.exe不在您的路径中,则可以在“系统环境变量”对话框中将其位置添加到上方,或将其文件夹添加到路径中。要打开该窗口,可以使用以下命令rundll32 sysdm.cpl,EditEnvironmentVariables
可以这样说,通过在运行时创建.reg文件并使用undocumented reg import /s
选项静默导入来添加注册表项会更加优雅。但是以我的经验,在运行时编写任何文件都会引发安全警报,例如COMODO Internet Securita,Panda,Norton等的等效版本以及任何基于HIPS模型的安全产品。当上述方法工作正常时,我认为不需要这样做,尤其是当您在多台计算机上使用或共享它,并且不想为其他人创建虚假警报时。
但是,如果您已经在使用nircmd,则可以使用其regsetval
命令代替reg add
.exe和.msi shell扩展名。文件夹选项仍然需要遍历目录列表以添加每个条目,因此不适用于这些选项。可以使用PowerShell和VBScript,但它们的可用性取决于Windows版本和许多其他变量。从安全角度来看,VBScript尤其是从Internet下载或在网络上共享时,VBScript作为漏洞利用媒介而享有盛誉,并且如果不明确设置PowerShell的执行策略以允许远程签名脚本,则PS1脚本将根本无法运行。
让我知道您在使用该代码时是否发现任何奇怪的地方,因为它仍在进行中。话虽如此,它应该使配置Windows 8.1的DPI设置更加容易。
在Windows 10上,您可以通过执行以下操作来达到相同的效果:
1:根据您拥有的版本(要找到它,请按Windows + R,输入“ winver”,然后按Enter):
手动输入缩放级别,即使该级别在下拉列表中可用。如果提示您退出以使设置生效,您将知道自己已正确完成。
2:将以下内容保存到桌面上的.reg文件,然后双击将其添加到注册表中:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001
3:将以下文件另存为 c:\windows\system32\mmc.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
<assemblyIdentity
processorArchitecture="x86"
version="5.1.0.0"
name="Microsoft.Windows.MMC"
type="win32"
/>
<description>Microsoft Management Console</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
4:打开任何MMC窗口(“服务”,“设备管理器”等),它们现在会更大,更清晰