Получите несоответствие типов результатов разрешения экрана - PullRequest
0 голосов
/ 24 октября 2018

У меня есть файл HTA, в котором я изменяю размер окна, чтобы оно отображалось в правой части экрана.

На некоторых компьютерах (около 10 из 120) я получаю ошибку несоответствия типовв строке, где мы хотим использовать разрешение пользователя (переместить или изменить размер окна).Я принимаю значение, которое я получаю, не является целым числом или, может быть, это ничто.

Все компьютеры работают на 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% случаев.

Если мы не вернем разрешение, мы попробуем другой способ получить разрешение 1-го экрана.

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

А здесь мы попробуем 3-й способ.

    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

У вас естьесть идеи, в чем может быть проблема.Почему я вообще получаю сообщение об ошибке?

#

Как посоветовал Ансгар Вичерс, я запустил на ПК простые 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 /

...