★今日の課題★
Visual Studio 2022を起動するとデザイン画面が100%スケールではない。
Microsoft Visual Studio 2022
マイクロソフト社が提供するコード開発環境です。
今では様々な言語が使える統合環境となっています。
筆者がこのシリーズを使い始めたのは『Visual Basic 6.0』という製品でしたので、当時は『BASIC』専用のソフトを買いました。
当時いくらで買ったか覚えていませんが、ヨドバシカメラの梅田店のソフトコーナーに行きました。
いまではダウンロードで、しかも無償で手に入る、時代が大きく変わりました。
【参考】Microsoft Visual Studio 2022
高解像度画面で発生する事象
ノートパソコンの標準搭載画面ではこの事象は発生しません。
外部ディスプレイにHDMIケーブルで接続し、『3480×2160』で表示していると起こる現象です。

自動スケールが影響?
高解像度ディスプレイを接続した状態でVisual Studio 2022のプロジェクトを起動すると、毎回、ズームアップしたようなスケールで開きます。
コード入力画面では見やすさの違い程度のことですので良いですが、デザイン画面は違います。
まったく違うサイズのフォームが表示され、オブジェクトがズレた位置に配置されます。
スケールが違っている事を知らずに修正してしまうと、ビルドしたときに異常が発生します。
実際、最初の頃は修正して失敗しました。

プロパティからの個別設定
以前、イラストレーターの表示が異常である際には、実行ファイルを右クリックして現れるプロパティから『高DPIスケール設定の上書き』を操作することで調整できました。
ただし、Visual Studio 2022はEXEファイルを右クリックしても『互換性』のタブがないので、この操作が実行できません。

【参考】Adobe CS6 高解像度画面対応 – 今日の課題 –
レジストリとは
Windowsマークをクリックして現れるスタート画面で『レジストリ』と入力するとレジストリエディターというアプリを起動することができます。
現れる画面はエクスプローラーのような感じで左側にフォルダ名、右側に属するファイル名、という感じになります。

解決策(レジストリ修正)
解決方法は、レジストリを追加するという姑息的手段でした。
色々と試したのですが、上手くいかなかったり、アップデート後が恐ろしいなと思ったりしたので、作業1つでできて削除もしやすいレジストリを選びました。
手順1.レジストリエディタを起動
スタートメニューで『レジストリ』と入力することで候補されるレジストリエディタを起動します。

手順2.一覧から階層を下げる
レジストリから『HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers』を開きます。
HKEY_CURRENT_USER
SOFTWARE
Microsoft
Windows NT
CurrentVersion
AppCompatFlags
Layers

- HKEY_CURRENT_USER…HKEYはレジストリハイブキー、CURRENT_USERは現在のユーザー
- SOFTWARE…ソフトウェア群を指定
- Microsoft…マイクロソフト製品を指定
- Windows NT…ウィンドウズNT関連製品を指定
- CurrentVersion…Currentは現在、VersionはバージョンなのでWindowsNT群の現在のバージョン群を指定
- AppCompatFlags…アプリケーションの互換性フラグを指定
- Layers…レイヤーを指定
すなわち、ここで互換レイヤ設定ができるようになる訳です。
手順3.文字列値を追加
レジストリエディターで互換レイヤ設定(Layers)を開いた状態でメニューの『編集』から『新規』を選び『文字列値』を選択します。

手順4.EXEファイルフルパス入力
『名前』欄にはVisula Studioのフルパスを入力します。
今回はVisula Studio 2022なので下記のとおりでした。
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe

パスがわからないときは、スタートメニューでVisual Studioを右クリックして現れるメニューから『ファイルの場所を開く』を選択します。
するとショートカット一覧のようなエクスプローラーが開くので、その中からさらにVisual Studioを選んで右クリックし『ファイルの場所を開く』を選択します。
すると、CドライブのVisual Studioの保存されているフォルダと実行ファイル(EXEファイル)が現れますので、そのフルパスを取得して名前欄に入力します。

- C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe
- C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe
- C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe
手順5.修正(編集)
追加されたVisual Studioのフルパスを右クリックして『修正(M)』を選択します。

そこで現れるインプットボックスに『DPIUNAWARE』と入力します。
DpiUnawareは『アプリケーション ウィンドウは DPI の変更に合わせて拡大縮小されず、常に 100% の倍率が想定されます。』という説明がMicrosoftから提供されています。

設定完了
以上で設定は終わりです。
Visual Studio 2022を起動しても、100%以外のスケールで表示されることはなくなりました。
【参考】Microsoft:Visual Studio の Windows フォーム デザイナーでの HDPI/スケーリングに関する問題を修正するには、DPI 認識を無効にします。
Window Update後に体裁崩れ
(2024年8月14日追記)
2024年8月13日にリリースされたVisual Studio 2022のVersion 17.10.6にアップデートすると、前述のレジストリによる指定が災いして体裁が崩れてしまいます。
あるいは、Windows update KB5041580 が影響しているかもしれませんが、いずれにしても体裁が崩れます。

状況としては、デザインやコードなど開いているものを選択するタブが表示されなくなる、デザイン画面でフォームを選択できない、デザイン画面でプロパティ値の変更などができないなど、色々と不都合があります。

どのようなアップデートであるかについて日本語版のMicrosoftのページには掲載がないのですが、英語版には掲載されていましたので引用します。
Summary of What’s New in this Release
- Fixed a bug where the compiler was generating AVX vector comparison instructions during /arch:SSE or /arch:SSE2 compilation.
- Fixed a compiler crash that was reported against 17.10 when compiling nanobind v.1.9.2.
- Fixed regressions in the C++ compiler related to guaranteed copy elision in C++17 or later.
- Fixed an issue with miscompilation of template-template parameter packs.
- Fixed an issue in which the MSVC compiler could not compile some code in qtwebengine and instead emitted “C2100: you cannot dereference an operand of type ‘v8::internal::compiler::turboshaft::WordRepresentation'”.
Developer Community
- vs2022 17.10.0p7: MSVC code-gen bug for “ARM64|Release” on some loop constructs
- Bug in x86 build inlining destructor with SPGO enabled
- An AVX instruction is generated even if “Enabled Enhanced Instruction Set” sets to “Not Set”
- Internal compiler error w/ nanobind v1.9.2
- VS 17.10: Spurious compile error C2102 (“&” requires l-value)
- QtWebEingine Compilation brings internal compiler error C2100
- Show Structure Guidelines are missing in some areas in a VB.Net project after upgrade to Version 17.10.3.
Security advisories addressed
Visual Studio 2022 version 17.10.6
- CVE-2024-38167 A vulnerability exists in .NET runtime TlsStream which may result in Information Disclosure.
- CVE-2024-38168 A vulnerability exists in .NET when an attacker through unauthenticated requests may trigger a Denial of Service in ASP.NET HTTP.sys web server. This is a windows OS only vulnerability.
released August 13th, 2024
Windows Updateについては日本語ページがありましたので引用しておきます。
リリース日: 2024/08/13
バージョン: OS ビルド 19044.4780 および 19045.4780
ハイライト
この更新プログラムは、Windows オペレーティング システムのセキュリティの問題に対処します。改善点
Windows 10 バージョン 22H2
このセキュリティ更新プログラムでは、品質が強化されました。 主な変更は、次のとおりです。
- このビルドには、サポートされているWindows 10バージョン 21H2 エディションのすべての機能強化が含まれています。
- このリリースでは、追加の問題は文書化されていません。
Windows 10、バージョン 21H2 エディション: Windows 10 Enterprise LTSC 2021 および Windows 10 IoT Enterprise LTSC 2021
このセキュリティ更新プログラムには、更新プログラム のKB5040525 (2024 年 7 月 23 日にリリース) の一部であった品質の向上が含まれています。 この KB をインストールするときにこの更新プログラムが対処する主な問題の概要を次に示します。 新しい機能がある場合は、それらの機能も一覧表示されます。 角かっこ内の太字のテキストは、ドキュメント化する変更の項目または領域を示します。
- [BitLocker (既知の問題)] デバイスを起動すると 、BitLocker の回復 画面が表示されます。 これは、2024 年 7 月 9 日の更新プログラムをインストールした後に発生します。 この問題は、 デバイスの暗号化 がオンになっている場合に発生する可能性が高くなります。 [ 設定] > [ プライバシー] & [セキュリティ] > [デバイスの暗号化] に移動します。 ドライブのロックを解除するために、Windows から Microsoft アカウントから回復キーを入力するように求められる場合があります。
- [ロック画面] この更新プログラムは CVE-2024-38143 に対処します。 このため、ロック画面で [Windows ユーザー アカウントを使用する] チェック ボックスを使用して Wi-Fi に接続することはできません。
- [NetJoinLegacyAccountReuse] この更新プログラムは、このレジストリ キーを削除します。 詳細については、「 KB5020276-Netjoin: ドメイン参加の強化の変更」を参照してください。
- [Secure Boot Advanced Targeting (SBAT) と Linux Extensible Firmware Interface (EFI)] この更新プログラムは、Windows を実行するシステムに SBAT を適用します。 これにより、脆弱な Linux EFI (Shim ブートローダー) の実行が停止されます。 この SBAT 更新プログラムは、Windows と Linux をデュアルブートするシステムには適用されません。 SBAT 更新プログラムが適用されると、古い Linux ISO イメージが起動しない可能性があります。 これが発生した場合は、Linux ベンダーと協力して更新された ISO イメージを取得します。
以前の更新プログラムをインストール済みであれば、このパッケージに含まれる新しい更新プログラムのみがダウンロードされ、デバイスにインストールされます。
セキュリティの脆弱性の詳細については、新しいセキュリティ更新プログラム ガイドの Web サイトと 2024 年 8 月のセキュリティ Updatesを参照してください。Windows 10 サービス スタック更新プログラム (KB5041579) – 19044.4769 および 19045.4769
この更新プログラムは、Windows の更新プログラムをインストールするコンポーネントであるサービス スタックの品質を向上します。 サービス スタック更新プログラム (SSU) をインストールすることで、堅牢で信頼性の高いサービス スタックを利用し、デバイスで Microsoft の更新プログラムを受信し、インストールできるようになります。バイナリの削除方法は、まずスタートメニューで『レジストリ』と入力することで候補されるレジストリエディタを起動します。
2024 年 8 月 13 日 — KB5041580 (OS ビルド 19044.4780 および 19045.4780)

その中から、Visual Studio 2022のために設定したバイナリデータを探します。
右クリックをして現れるメニューから『削除(D)』を選択して、確認ポップアップでOKすれば削除できます。

バイナリデータ削除後、いつも通りの画面に戻りました。

【参考】Microsoft: Visual Studio 2022 version 17.10 Release Notes
【参考】Microsoft: Visual Studio 2022 バージョン 17.10 リリース ノート
【参考】Microsoft: 2024 年 8 月 13 日 — KB5041580 (OS ビルド 19044.4780 および 19045.4780)
Updateで100%スケールに戻れる
(2025年2月4日追記)
2024年11月にリリースが始まったVisual Studio 2022のVersion 17.12は、2025年1月14日に 17.12.4 がリリースされています。

いくつものバグ修正が報告されている中で、KB5041580に関する記述がありました。
Windows update KB5041580後、マージ エディター ウィンドウを開くと、Visual Studio がサイレント モードでクラッシュします。
バージョン 17.12.2 主なバグ修正
KB5041580といえば前回、2024年8月13日にリリースされて、8月14日に筆者のパソコンで100%スケールの設定が使えなくなったあの日のUpdateです。
さっそく、レジストリエディタを使って修正を加えてみました。
完璧です。Visual Studio 2022を起動してプロジェクトを開くと、設定なしに100%スケールで起動するようになりました。これで、誤って変なサイズで編集してしまうこともなくなります。

【参考】Visual Studio 2022 リリース ノート
これまでの記事
AmpiTaで投稿したこれまでの関連記事をリンクしておきます。
おわりに
今回はVisual Studioが150%スケールで起動してしまう問題の解消を図りました。
とりあえず、今日の時点では解決に至っていますが、何らかのUpdateなどによって再び未解決になり得ることも想定しながら、使い続けていきたいと思います。
最後までお読みいただき、ありがとうございました。
