Windows 8.1ではシステム全体の「Windows XPスタイル」の高DPIサポートが許可されていないため、Microsoft管理コンソールアプリ(mmc.exe)を高DPI対応にするにはどうすればよいですか? 「互換性のトラブルシューティング」のコンテキストメニュー項目。
[互換性]タブはシステムファイルに対して非表示になっているので、[高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などのルートレベルのフォルダーでこのオプションを使用することは、何百ものレジストリエントリを作成するため、お勧めできません。ただし、場合によっては、特にProcess Explorerやその他のSysinternalsユーティリティ、またはNirsoftユーティリティでは必須です。これらはすべて、DPIスケーリングを無効にしても問題なく動作しますが、マニフェストで明示的に指定されたオプションはありません。
コードの最後のバッチでは、内部のstartコマンドを使用して、コマンドプロンプトウィンドウをできるだけ早く表示し、フォルダーの内容を解析するときに最小化します。 @記号は、出力内のコマンドのエコーバックを防ぐために使用され、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シェル拡張機能にreg add
ではなくregsetval
コマンドを使用するのが理にかなっています。フォルダオプションは、ディレクトリリスティングを繰り返し処理して各エントリを追加する必要があるため、それらのエントリでは機能しません。 PowerShellとVBScriptはオプションですが、使用できるかどうかはWindowsのバージョンと他の変数のホストによって異なります。セキュリティの観点から、VBScriptは、特にインターネットからダウンロードしたり、ネットワーク上で共有したりした場合のエクスプロイトベクトルとしての評判があり、PS1スクリプトは、PowerShellの実行ポリシーを明示的に設定してリモート署名付きスクリプトを許可しないとまったく実行できません。
そのコードを使用しているときにまだ何かおかしいことに気づいたら、まだ作業中です。そうは言っても、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ウィンドウ(サービス、デバイスマネージャーなど))を開くと、大きくてシャープになります