★今日の課題★
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にアップデートすると、前述のレジストリによる指定が災いして体裁が崩れてしまいます。
状況としては、デザインやコードなど開いているものを選択するタブが表示されなくなる、デザイン画面でフォームを選択できない、デザイン画面でプロパティ値の変更などができないなど、色々と不都合があります。
どのようなアップデートであるかについて日本語版の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
バイナリの削除方法は、まずスタートメニューで『レジストリ』と入力することで候補されるレジストリエディタを起動します。
その中から、Visual Studio 2022のために設定したバイナリデータを探します。
右クリックをして現れるメニューから『削除(D)』を選択して、確認ポップアップでOKすれば削除できます。
バイナリデータ削除後、いつも通りの画面に戻りました。
【参考】Microsoft: Visual Studio 2022 version 17.10 Release Notes
【参考】Microsoft: Visual Studio 2022 バージョン 17.10 リリース ノート
これまでの記事
AmpiTaで投稿したこれまでの関連記事をリンクしておきます。
おわりに
今回はVisual Studioが150%スケールで起動してしまう問題の解消を図りました。
とりあえず、今日の時点では解決に至っていますが、何らかのUpdateなどによって再び未解決になり得ることも想定しながら、使い続けていきたいと思います。
最後までお読みいただき、ありがとうございました。