9

WMIWin32_MonitorDesktopを使用して、システム上のすべてのモニター情報を取得しています。

ただし、返されるのは 1 つだけです。いくつかのコンピューターで試してみましたが、それらには間違いなく複数のモニターがあり、接続されて動作しています。

ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");

foreach (ManagementObject monitor in monitorObjectSearch.Get())
{
      Debug.WriteLine(monitor["Description"]);
}

モニターが 1 つしか返されない理由を知っている人はいますか?

また、monitorObjectSearch.Get() の戻り値を変数に割り当てると、関数が常にタイムアウトするため、イミディエイト ウィンドウで Count プロパティを評価できません。

4

4 に答える 4

1

多くのシステム (WinXP-SP3 から Win10 まで) で WMI を使用してこの問題を解決しようとしましたが、異なるマシンでは異なる結果が得られました。現在のモニター設定を保存できるテーブルが 2 つあります。1つ目はcimv2名前空間のWin32_DesktopMonitorで、2 つ目はwmi名前空間のWMIMonitorIDです。そのうちの 1 つにレコードが 1 つしかない場合 (マルチディスプレイ設定)、2 番目にはすべてのエントリがあります。

次に、モニターのドライバー名を取得するには、 cimv2名前空間のWin32_PnPEntityテーブルのこれらのテーブルのレコードで見つかった PnPDeviceID を持つデバイスを見つける必要があります。サンプル ソリューションはこちらで確認できます。

于 2016-04-22T08:27:29.820 に答える
1

モニターが水平スパン モード (NV および ATI カード) でセットアップされている可能性があります。これにより、複数のモニター セットアップが効果的に 1 つの大きなモニターになりますか? そうでなければ、私は考え続けます..

また、MSDNでは、この WMI 呼び出しを pre-vista で使用すると、不正確な結果が生じると非常に具体的に述べています!?

于 2009-09-14T14:58:33.147 に答える
0

Windows 7マシンでwmi(win32_Desktopmonitor)の同じコードを使用します。モニターが1つだけ返されるという意味で、実際には2つあるので、そこでも機能しません。

また、Screen.Allscreens.Lengthは、1つのモニターのみを返します。システムが2台のモニターを返すようにする唯一の方法は、デスクトップを2台のモニターに拡張することですが、それはほとんどの人が行うことではありません。

于 2010-12-30T19:08:17.860 に答える
0

これは確かに実際の質問には答えませんが、モニター情報を把握する最も信頼できる方法は、次のレジストリを読み取ることです。

"SYSTEM\CurrentControlSet\Enum\DISPLAY\"

HKEY_LOCAL_MACHINE

于 2016-04-23T21:55:50.453 に答える