如何用vbscript获取第二个显示的坐标?

时间:2013-11-28 14:53:23

标签: vbscript

我有这个脚本,我正在获得所有显示器的水平和垂直分辨率,但到目前为止我没有找到任何方法来知道显示器的坐标(我需要知道第二个显示器是否连接到计算机位于主显示屏的左侧或右侧)。 有没有我可以使用vbscript运行的代码可以获取这些信息?

    Set wmiObjSet = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_VideoController")
    For Each obj In wmiObjSet
      WScript.Echo obj.CurrentHorizontalResolution
      WScript.Echo obj.CurrentVerticalResolution
    Next

谢谢!

1 个答案:

答案 0 :(得分:0)

遗憾的是,WMI中似乎不存在这些信息。它在注册表中,例如有关2个监视器的信息可能是2个键,如下所示:

HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\VIDEO\{CDF19DFF-A10C-4CD9-ACD5-B830567D7476}\0000
HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\VIDEO\{CDF19DFF-A10C-4CD9-ACD5-B830567D7476}\0001

查看Attach.RelativeX的值,我认为值为零表示主监视器,正数表示监视器是主要的,左侧为负。

那么问题是如何确定视频适配器的CLSID ......这有点令人费解。我也许会从PNPDeviceID中选择Win32_VideoController,它看起来像是:

PCI\VEN_8086&DEV_0126&SUBSYS_161C103C&REV_09\3&e89b380&0&10

然后使用它来构建一个注册表项路径:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI\VEN_8086&DEV_0126&SUBSYS_161C103C&REV_09\3&e89b380&0&10\Device Parameters

获取VideoID的值,然后使用它来构建HKEY_CURRENT_CONFIG密钥的路径。

编辑用于说明上述内容的脚本

Option Explicit

Const HKLM = &H80000002
Const HKCC = &H80000005
Dim reg, clsid, mons, xval, i
Dim wmi, vc

Set reg = GetObject("winmgmts:\\.\root\default:StdRegProv")
Set wmi = GetObject("winmgmts:")

'what if there is more than one instance of VideoController??
For Each vc In wmi.ExecQuery("Select * from Win32_VideoController")

  Call reg.GetStringValue( HKLM, _
      "SYSTEM\ControlSet001\Enum\" & vc.PNPDeviceID & "\Device Parameters", _
      "VideoID", clsid)

  Call reg.EnumKey(HKCC,"System\CurrentControlSet\Control\VIDEO\" & clsid,mons)

  For i = LBound(mons) To UBound(mons)
    Call reg.GetDWORDValue(HKCC, _
        "System\CurrentControlSet\Control\VIDEO\" & clsid & "\" & mons(i), _
        "Attach.RelativeX", xval)

    If xval = 0 Then
      WScript.Echo "Monitor " & mons(i) & " appears to be the primary monitor"
    ElseIf xval < 0 Then
      WScript.Echo "Monitor " & mons(i) & " is left of primary"
    ElseIf xval > 0 Then
      WScript.Echo "Monitor " & mons(i) & " is right of primary"
    End If
  Next
Next
相关问题