回答:
システムファイルの[互換性]タブは非表示になっているため、[高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スケーリングを無効にする」設定は一緒に保存されるため、管理者として実行するように設定されているファイルでそのコマンドを呼び出すと、そのフラグがクリアされ、代わりにDPIスケーリングフラグが設定されます。これは、マニフェストに正しいrequestedExecutionLevelが含まれているファイルではなく、手動でボックスをチェックしたファイルにのみ影響します。
参考までに、両方がチェックされている場合、文字列は「〜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\""
Program Filesのようなルートレベルのフォルダーでこのオプションを使用するのは、何百ものレジストリエントリを作成するため、お勧めできません。ただし、場合によっては、特にプロセスエクスプローラーと残りの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ファイルを作成し、文書化されていないreg import /s
オプションを使用してサイレントにインポートすることにより、レジストリキーを追加する方がよりエレガントになるという議論をすることができます。しかし、私の経験では、実行時にファイルを書き込むと、COMODO Internet Securita、Panda、Nortonなどの同等バージョン、およびHIPSモデルに基づくものなどのセキュリティ製品であらゆる種類のアラームが発生します。特に上記を複数のコンピューターで使用している場合や共有している場合に、他の人に誤報を与えたくない場合は、上記の方法で問題なく動作する必要はありません。
ただし、既にnircmdを使用している場合は、.exeおよび.msiシェル拡張のregsetval
代わりにそのコマンドを使用するのが理にかなっていますreg add
。フォルダオプションは、ディレクトリリスティングを反復処理して各エントリを追加する必要があるため、それらのエントリは機能しません。PowerShellとVBScriptはオプションですが、それらの可用性はWindowsのバージョンと他の変数のホストに依存します。セキュリティの観点から、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ウィンドウ(サービス、デバイスマネージャーなど)を開くと、ウィンドウが大きくなり、シャープになります