首页 > 解决方案 > 获取屏幕分辨率结果类型不匹配

问题描述

我有一个 HTA 文件,我在其中调整了窗口的大小,以便在屏幕右侧进行调整。

在某些计算机上(大约 120 台计算机中的 10 台),我在我们希望用户使用分辨率(移动或调整窗口大小)的那一行出现类型不匹配错误。我认为我得到的值不是整数,或者它什么都不是。

所有 PC 都在 Win 7 上,我看不出它们之间有任何区别(但似乎有)

这是在“Window_onLoad”子中完成的:

Sub Window_onLoad()
    Dim per
    Set wshShell = CreateObject("Wscript.Shell")
    Set getOSVersion = wshShell.Exec("%comspec% /c ver")
    version = getOSVersion.StdOut.ReadAll
    Select Case True
        Case InStr(version, "n 5.") > 1 : GetOS = "XP"
            'WIN XP CODE HERE...
        Case InStr(version, "n 6.") > 1 : GetOS = "Vista/7"
            '<--- Win 7
            strComputer = "."
            Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
            Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
            For Each objItem In colItems
                intHorizontal = objItem.ScreenWidth
                intVertical = objItem.ScreenHeight
            Next

在这一点上,我们得到了整数的分辨率,并且在 99% 的情况下都可以正常工作。

如果我们没有得到分辨率,我们尝试另一种方法来获取第一个屏幕的分辨率。

If IsNumeric(intHorizontal) And IsNumeric(intVertical) Then
Else
    MsgBox "2"
    Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor where DeviceID = 'DesktopMonitor1'",,0)
    For Each objItem In colItems
        intHorizontal = objItem.ScreenWidth
        intVertical = objItem.ScreenHeight
    Next

    If IsNumeric(intHorizontal) And IsNumeric(intVertical) Then

在这里我们尝试第三种方式。

    Else
        MsgBox "3"
        Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor where DeviceID = 'DesktopMonitor2'",,0)
        For Each objItem In colItems
            intHorizontal = objItem.ScreenWidth
            intVertical = objItem.ScreenHeight
        Next
    End If
End If

在这里我们应该有分辨率,我们只是计算正确的位置。

            intLeft = intHorizontal - 300 ' (intHorizontal + 800)/ 2
            intTop = 1 ' (intVertical + 400) / 4
            Window.resizeTo 300, intVertical - 40  '<--- HERE we get the error
            Window.moveTo intLeft, intTop
            'Some additional code here...
        Case InStr(version, "n 10.") > 1 : GetOS = "W10"
            'WIN 10 code here ...
        Case Else : GetOS = "Unknown"
            MsgBox "Not Supported ( Unknown OS)"
    End Select

    'Some addtitonal code here...
End Sub

你有什么想法可能是什么问题。为什么我会收到错误消息?

#

正如 Ansgar Wiechers 建议的那样,我在遇到问题的 PC 上运行了一个简单的 vbs:

msgbox "TEST"
strComputer = "."
                set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
                set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
        For Each objItem In colItems
                    intHorizontal = objItem.ScreenWidth
                    intVertical = objItem.ScreenHeight
                Next
        msgbox TypeName(intHorizontal)
        msgbox TypeName(intVertical)
        msgbox (intHorizontal)
        msgbox (intVertical)

我得到: TEST/ Null/ Null/ 错误: 无效使用intHorizontal/

标签: vbscriptscreen-resolutionhta

解决方案


推荐阅读