• ベストアンサー

windowsVISTAを使用しています。

windowsVISTAを使用しています。 http://msdn.microsoft.com/en-us/library/aa394542(VS.85).aspx このWMIを使用したVBSを作り、デュアルモニタのシリアルを二つとも習得したいのですが、 どのように構文を書けばいいのかさっぱりで・・・・ どなたかご教授ください。 XPでは使用できないみたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

環境が無いのがもどかしい、、、 >短い構文ではシリアル取得は出来ませんでした ってことは、#1の10550Monitor Serial Number.zipのサンプルは取得できたってことですね? Process_Other_Displays という関数が関係するかも知れません。 レジストリを読むところで、デュアルの処理をしているのかな? おまけに、こういった履歴もありましたので載せておきます。 http://okwave.jp/qa/q4265007.html WmiMonitorIDについては、環境が無いためこちらからの的確なアドバイスはできません。 http://msdn.microsoft.com/en-us/library/Aa394542 http://social.technet.microsoft.com/Forums/en/configmgrinventory/thread/cf223ca9-f05b-4eca-85be-e3b486d25f2e という解説からすると、、、 \root\cimv2 が \root\wmi となって、SQL文が select * from WmiMonitorID となるようなことぐらいしかわかりません。 ところでこのクラスでデュアルモニタの取得ができるって書いてありました? 想像の中ですが、結局最初に示したサンプルの「Process_Other_Displays」関数のようにレジストリを読みに行く処理になりそうな気が、、、 う~環境が欲しい^^; うまく行かないときは、うまくいっていないと伝えてくれると、環境のある人から的確なアドバイスをしてくれるかもですよ~

mugifujiko
質問者

お礼

とりあえずXPからのVBSで乗り切りました。 長い間放置してもうしわけございません。 本当にお知恵を貸していただき、私に足りないものは根本的なVBSへの理解だと いうことがわかりました。一生懸命勉強してきます。 ありがとう、ありがとうございました。

その他の回答 (3)

回答No.3

失礼しました。 WMIですね。。。 Dim WMI Dim info Dim l_prp Set WMI = GetObject("winmgmts:\\.\root\CIMV2") For Each info In WMI.ExecQuery("SELECT * FROM Win32_DesktopMonitor") Dim l_strBuff l_strBuff = "" For Each l_prp In info.Properties_ l_strBuff = l_strBuff & l_prp.Name & "=" & l_prp.Value & Chr(10) Next MsgBox l_strBuff MsgBox ("プロパティには、こういうアクセスもできる→" & vbTab & info.PNPDeviceID) Next 最近シリアル取得が流行中なのかな? 似たような質問がありました。 http://okwave.jp/qa/q5885125.html

mugifujiko
質問者

補足

ありがとうございます。 なぜか短い構文ではシリアル取得は出来ませんでした。 例えばWin32_BIOSの場合、 strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS",,48) For Each objItem in colItems と始められますが、 WmiMonitorIDではどのように書けばいいのか・・・・

回答No.2

確かに長いですね。。。 でも要約しちゃうと、以下のような感じです。 これでデュアルモニタまで拾えるかはわかりませんが、、、 Imports System.Management '要:参照設定[System.Management] Module Module1   Sub Main()     Dim l_objQry As New ObjectQuery("SELECT * FROM Win32_DesktopMonitor")     Dim l_Scope As New ManagementScope("\\.\root\cimv2")     Dim l_mng As New ManagementObjectSearcher(l_Scope, l_objQry)     For Each info As ManagementObject In l_mng.Get()       Dim l_strBuff As String = ""       For Each l_prp As PropertyData In info.Properties         l_strBuff &= String.Format("{0}:={1}", l_prp.Name, l_prp.Value) & vbCrLf       Next       MsgBox(l_strBuff)     Next   End Sub End Module

回答No.1

Vista持ってないので、WmiMonitorIDが使える環境がないのですが、、、 WmiMonitorIDを使うのが必須ですか? 下のページはもう既にご覧になられたかも知れませんが、、、、 http://q.hatena.ne.jp/1259751587 からリンクが張られているページの一番下の方にある 10550Monitor Serial Number.zip これは試されましたか? 必須であれば、すいません。 この発言を読み飛ばしてください。

mugifujiko
質問者

補足

そちらのリンクは以前参考にさせていただきました。 そのVBSでもシリアルの取得はできるのですが、 何ぶん構文が長すぎて短くできないかなと思い、wmimonitorIDを 使ってみようと思った次第でございます。 既存のポインティングデバイスを参照する構文をいじったりしてみましたが、 さっぱりで・・・・

関連するQ&A