カテゴリー
ICT・AI・robo

Visual Studio 100%スケール表示 ~今日の課題~

★今日の課題★
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 認識を無効にします。

【参考】Microsoft:HighDpiMode 列挙型




Window Update後に体裁崩れ
(2024年8月14日追記)

 2024年8月13日にリリースされたVisual Studio 2022のVersion 17.10.6にアップデートすると、前述のレジストリによる指定が災いして体裁が崩れてしまいます。

Windows Updateの履歴
Windows Updateの履歴

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

Visual Studio 2022のデザイン画面
Visual Studio 2022のデザイン画面

 どのようなアップデートであるかについて日本語版の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

  • 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.
Visual Studio 2022 version 17.10.6
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などによって再び未解決になり得ることも想定しながら、使い続けていきたいと思います。

 最後までお読みいただき、ありがとうございました。

解決

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です