|
■No82779 (ガンマ さん) に返信 > VB用に翻訳してみたところ以下のようになりました
……WMI の利用は初めてでしょうか?
WMI の利用経験が無いのであれば、まずはコーディング前に、 求める値が得られるのかどうか、まずは PowerShell で試してみることをお奨めします。
PowerShell のコンソールを起動し、 『Get-WmiObject -Namespace root\wmi -Class WmiMonitorBasicDisplayParams』 というコマンドを実行してみてください。モニタ情報が表示されるはずです。
> MSMonitorClassやuint8などでエラーが出てビルドすることができません。
WMI のクラスは、自分で宣言するのではなく、 参照設定に『System.Management』を加えた上で、 System.Management名前空間のクラス群を通じて利用するものです。
あるいは、「MgmtClassGen」でラッパークラスを作って利用するか。
たとえば後者の場合は、Visual Studio コマンドプロンプトから 『MgmtclassGen Win32_Logicaldisk /L VB /N root\cimv2』 のコマンドを実行することで、ラッパークラスが生成され、 下記のように取得できます。
Dim monitorSize() As Double = ( _ From mo In ROOT.WMI.WmiMonitorBasicDisplayParams.GetInstances() _ .OfType(Of ROOT.WMI.WmiMonitorBasicDisplayParams)() _ Let h = CDbl(mo.MaxHorizontalImageSize), v = CDbl(mo.MaxVerticalImageSize) _ Select Math.Sqrt(h * h + v * v) / 2.54 _ ).ToArray()
一方前者は、提示頂いたサイトで使われていた方法ですね。 あらかじめ、System.Management 名前空間を Imports しておいてください。
Dim monitorSize() As Double Dim p = "Root\wmi:WmiMonitorBasicDisplayParams" Using m As New ManagementClass(p), monitors = m.GetInstances() Dim q = From mo In monitors.OfType(Of ManagementBaseObject)() Let h = CDbl(mo("MaxHorizontalImageSize")), v = CDbl(mo("MaxVerticalImageSize")) Select Math.Sqrt(h * h + v * v) / 2.54 monitorSize = q.ToArray() End Using
※マルチモニタ環境の場合があるため、列挙された一覧は配列に入れています。
|