Windows 仮想マシンで内部ディスプレイをエミュレートする方法

Windows 仮想マシンで内部ディスプレイをエミュレートする方法

仮想マシンでプログラムを実行しようとしています。このプログラムは、クエリを使用して Windows WMI を通じてディスプレイ情報を取得しようとします。

var success = true;

List<Display> displays = new List<Display>();

// Query WmiMonitorBasicDisplayParams to retrieve display parameters
using (var searcher = new ManagementObjectSearcher(@"Root\WMI", "SELECT * FROM 
WmiMonitorBasicDisplayParams"))

using (var results = searcher.Get())

何らかの理由で、Windows WMI は仮想ディスプレイのディスプレイ情報を取得できず、プログラムがクラッシュして次の例外がスローされます。

Unhandled exception. System.Management.ManagementException: Not supported
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()

これはすべての仮想マシンで発生し、ディスプレイは常に非 PnP デバイスとして分類されます。

では、Windows WMI がプログラムをクラッシュさせないように、実際の内部ディスプレイ (ラップトップ ディスプレイなど) をエミュレートするにはどうすればよいでしょうか。それ以外の場合は、WMI クエリの結果を傍受して変更し、それをプログラムの C# コードに返す方法はありますか。

答え1

仮想マシン アプリ (VMware、Virtual Box、Hyper-V) は、ゲスト マシンが使用する仮想ハードウェア (実際のハードウェアではない) を作成します。

では、Windows WMI がプログラムをクラッシュさせないように、実際の内部ディスプレイ (ラップトップ ディスプレイなど) をエミュレートするにはどうすればよいでしょうか。それ以外の場合は、WMI クエリの結果を傍受して変更し、それをプログラムの C# コードに返す方法はありますか。

できません (私の最初のコメントのとおり)。あなたがしようとしていることは、仮想マシンでは機能しません。

VMwareとHyper-Vの両方を使用しています

プログラムを実行してテストするには、実際の(物理的な)マシンが必要です。

関連情報